• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[VBA]改行入りのセルの値を配列に格納したい)

[VBA]改行入りのセルの値を配列に格納する方法

このQ&Aのポイント
  • EXCELの特定の列に改行入りの値が格納されています。この値を配列に格納する方法を教えてください。
  • 改行がある場合、改行を区切り文字として配列に格納します。改行がない場合や値が存在しない場合も適切に配列に格納する方法を教えてください。
  • 要約文の内容: EXCELの特定の列に改行入りの値が格納されており、それを配列に格納する方法について教えてください。改行がある場合は改行を区切り文字として配列に格納し、改行がない場合や値が存在しない場合も適切に配列に格納する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんばんは。 ターゲットとなるセルをCells(y,x)とすれば arrValue=Split( Cells(y,x).Value , vbLf ) でできそうです。 EXCEL 2010 で確認しました。 ただし、セル値に入力されていない場合(上の例では3行目)はエラーになるので、例外処理しておいた方がよいですね。

kwang0205
質問者

お礼

お返事遅くなりました。 SPLIT関数っていうのがあったんですね。 区切り文字もchr(10)で判断しようとしてましたが、vblfは分かりやすくていいですね。 とてもシンプルな式でこんなのを望んでいました。 ありがとうございましたm(_ _)m

その他の回答 (4)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

こんにちは、参考に Sub Test()   Dim arrValue(), v As Variant   Dim c As Range, i As Long, j As Long   i = -1   For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))     If c.Value = "" Then       i = i + 1       ReDim Preserve arrValue(i)       arrValue(i) = ""     Else       v = Split(c.Value, vbLf)       For j = 0 To UBound(v)         i = i + 1         ReDim Preserve arrValue(i)         arrValue(i) = v(j)       Next     End If   Next   '<<< 配列確認 >>>   For i = 0 To UBound(arrValue)     MsgBox arrValue(i)   Next End Sub

回答No.4

配列としてデータを読み取りたいという要望ですが、 取扱可能なデータとして取り込む方法を書きます。 その方が実状に合っている気がしますので。 処理対象データがA1-A4セルにあるとして、 Dim A,B,C Dim AA Dim AAA() ReDim AAA(4,10) '4:処理対象データの数,10:処理対象データの中に存在する改行文字(Cahr(10))の想定最大値+1 For A=1 To 4 '処理対象データ:AAを取得 AA=Cells(A,1).Valu '処理対象データの中に存在する改行文字数:Bを算定 B=Len(AA)-Len(Replace(AA,Chr(10),"")) If B>0 Then  For C= 1 To B '処理対象データのうち、左方より1番目の改行文字から左方の値を取得 AAA(A,C)=Left(AA,Instr(AA,Chr(10)-1) '処理対象データのうち、左方より1番目の改行文字から右方の値を取得 AA=Right(AA,Len(AA)-Instr(AA,Chr(10)) Next C '処理対象データのうち、最右方の改行文字から右方の値を取得 AA(A,C+1)=AA Else AAA(A,1)=AA End If Next A AAA(A,B+1)から要求されるデータを引き出せます。 ちなみに AAA(4,2)="fff" です。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

とりあえずA列にデータがあるとして B列から横方向1個の配列ごとにデータを入力していきます。 Sub Sample1() Dim myArray() As String Dim i As Long, j As Long Dim c As Range j = 2 For Each c In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) myArray() = Split(c.Value, vbLf) For i = 0 To UBound(myArray) Cells(i + 1, j).Value = myArray(i) Next i j = j + 1 Next End Sub

  • nofx35
  • ベストアンサー率82% (14/17)
回答No.1

以下のFunctionを標準モジュールに設定 Public Function GetArray(ByVal Target As Range) As Variant   If Target.Count > 1 Then Exit Function '複数のセルが渡されたらExit   GetArray = Split(Target.Value, vbLf) 'Splitを使い vbLfで分割し配列生成 End Function 使用例 Public Sub Try()   Dim Area As Range,rng As Range   Dim v() As Variant   Dim i As Long   '範囲指定   Set Area = Range("A1:A4")   'セルの数だけ配列を確保   ReDim v(Area.Count - 1) As Variant 'この場合v(0)からv(3)までの4つ確保   '指定範囲のセルを列挙   For Each rng In Area     '自作関数にrngを渡し配列を得る     v(i) = GetArray(rng)     i = i + 1   Next   Stop 'ここで止まるのでローカルウィンドでvの中身を確認 End Sub

関連するQ&A