Excelのこととか色々

マクロをどんな Excel ファイルにも実行できるように設定して、3秒かかる操作も1秒で完了。あといろいろ書いてみます・・・

【VBAスタンダードに挑戦!】配列(受け取る)

【VBAスタンダードに挑戦!】

f:id:tuna-kichi:20200614200940p:plain

 

本日の5分勉強の内容

 

 

********************************************************

配列

Split関数

・Split(元の文字列、区切り文字)

・元の文字列を区切り文字で区切って配列で返す

・「配列型」は無いので、Variant型で定義する

※ Split・・・裂く、分割する
  Variant・・・可変の

UBound関数

・UBound(配列)

配列の上限を返す
 なので、要素(データ)が3つの場合「2」を返す

・下限は必ず 0(ゼロ)
 上限は不明(数えられない)な時もあるのでその場合に使える

※ UBound・・・境界
  Uは Upperのことかな? 
  下限を返す LBound というのもある、こっちは Lower?

********************************************************

Sub F_Procedure()
 Dim A  As Variant '配列を操作できるように定義する
 Dim i As Long 

 Range("A1") = "Shirt:Cap:Shoes"

 A = Split(Range("A1"), ":") 
 'コロンで区切られた文字列を分割して、配列に入れる

 For i = 0 to UBound(A) '0から配列の個数分繰り返す
  Msgbox A(i)
 Next i

End Sub

                

Range("A1") = Split("Shirt:Cap:Shoes", ":")

とやってみても Range("A1") には "Shirt" しか入力されませんでした。

「Split関数は配列を返す」の意味が分かりました。

 

Split関数は複数の結果がでるので、

その分の受け入れる箱が必要ってことですね。

 

ちなみに、VBA ではなく、Excel の機能の「区切り位置」

をマクロの記録をしてみるとこんな感じでした。

Selection.TextToColumns Destination:=Range("L2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True

赤字の所で

「コロンで区切って、3つのセルに入力する」って感じでしょうか。

 

 

 「セルが3つ必要」って判断は内部で計算しているのかな?

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 

  Graspyで無料プログラミング講座を受講する