個人的に、上から順によく使うものと忘れやすいものになっています。
自分用の備忘録です。
配列の初期化のパターン
Dim arr() As Variant Dim arr1(1) As Long Dim arr2(2) As String '配列初期化 Erase arr
0が入るか空っぽになるかの差。
変数定義
Option Explicit Public str1 As String, str2 As String Dim result '変数のみでVariant型に Dim result_str As String '文字列型 Dim num1 As Integer '数値今はあまり意味がないらしい Dim num2 As Long '数値 実質はLongとして内部処理されているらしい Dim objAs Object Dim ws As Worksheet Dim item As Variant
最大行と最大列の取得
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column Set ws = Worksheets("TOP") With ws MaxRow = .Cells(Rows.Count, 1).End(xlUp).Row MaxCol = .Cells(1, Columns.Count).End(xlToLeft).Column End With
文字列を指定文字で分割するSplit
公的機関が配布しているデータの中にも、よくSplitしなければならないデータがあります。
指定文字数での分割もあるかと思います。
Sub test() str1 = "test1,test2,test3" split_str = Split(str1, ",") End Sub
文字列を指定文字で分割したあとの配列のループと配列の初期化
''配列を分割したあとにループで前後に文字を追加する 'strにカンマが複数ある場合、カンマで区切る split_str = Split(str, ",") For Each item In split_str split_str_replace = split_str_replace & "分割後の文字列は" & StrConv(item, vbWide) & "です" Next item Erase split_str '配列の初期化 Erase split_str_replace '配列の初期化
▼「Redimが無効です」と出る例
分割後に半角数字を全角へ変換もしています。
Sub test1() str1 = "test1,test2,test3" 'strにカンマが複数ある場合、カンマで区切る split_str = Split(str1, ",") For Each item In split_str split_str_replace = split_str_replace & "分割後の文字列は" & StrConv(item, vbWide) & "です," Next item Erase split_str '配列の初期化 arr = Split(split_str_replace, ",") '配列の最後の要素を削除 ReDim Preserve arr(UBound(arr) - 1) Erase split_str_replace '配列の初期化 End Sub
Variant には配列を含むことができますが、明示的に宣言されていない場合は、ReDim を使用して配列に変更できません。
無効な ReDim です | Microsoft Docs
▼「Redimが無効です」と出た場合の修正
配列の宣言を入れただけの修正。
Sub test2() Dim arr str1 = "test1,test2,test3" 'strにカンマが複数ある場合、カンマで区切る split_str = Split(str1, ",") For Each item In split_str split_str_replace = split_str_replace & "分割後の文字列は" & StrConv(item, vbWide) & "です," Next item Erase split_str '配列の初期化 arr = Split(split_str_replace, ",") '配列の最後の要素を削除 ReDim Preserve arr(UBound(arr) - 1) Erase arr '配列の初期化 End Sub
文字列を指定文字で分割したあと、配列のループで配列内に処理した文字列を再度格納する
vbaでforでループさせ、uboundで配列要素数分を取得しループ処理します。
配列の最初である0からカウントアップして、任意処理した文字列を戻します。
Sub test3() str1 = "test1,test2,test3" 'strにカンマが複数ある場合、カンマで区切る split_str = Split(str1, ",") For i = 0 To UBound(split_str) split_str(i) = "分割後の文字列は" & StrConv(split_str(i), vbWide) & "です" Next End Sub
SmartArtの取り扱い
Call ActiveSheet.Shapes.AddSmartArt(Application.SmartArtLayouts( _ "urn:microsoft.com/office/officeart/2005/8/layout/hierarchy2")) Set oShape = ActiveSheet.Shapes(1) For i = 1 To oShape.SmartArt.AllNodes.Count oShape.SmartArt.AllNodes(i).TextFrame2.TextRange.Text = "Sample " & Cells(i, 1) Next oShape.SmartArt.Nodes.Add
SmartArt.Nodes.Addをループ処理した場合、ノード追加で自動的に3つ毎に繰り下がって増えていく状況を目視確認。
デフォルトのノードの増え方は、グラフの形状にもよると判断している。
参考
限定的に役立つVBA
【VBA】【没コード集】VBAで、文字列に誘導員という文字があるセルを、最下部の行から調べていき、見つけたら変数に格納して、見つけた行以外の、59列目と60列目に転記する場合。
当サイトはリンクフリーです。
ご自身のブログでの引用、TwitterやFacebook、Instagram、Pinterestなどで当サイトの記事URLを共有していただくのは、むしろありがたいことです。
事前連絡や事後の連絡も不要ですが、ご連絡いただければ弊社も貴社のコンテンツを紹介させていただく可能性がございます。