- ベストアンサー
[VBA]改行入りのセルの値を配列に格納する方法
- EXCELの特定の列に改行入りの値が格納されています。この値を配列に格納する方法を教えてください。
- 改行がある場合、改行を区切り文字として配列に格納します。改行がない場合や値が存在しない場合も適切に配列に格納する方法を教えてください。
- 要約文の内容: EXCELの特定の列に改行入りの値が格納されており、それを配列に格納する方法について教えてください。改行がある場合は改行を区切り文字として配列に格納し、改行がない場合や値が存在しない場合も適切に配列に格納する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ターゲットとなるセルをCells(y,x)とすれば arrValue=Split( Cells(y,x).Value , vbLf ) でできそうです。 EXCEL 2010 で確認しました。 ただし、セル値に入力されていない場合(上の例では3行目)はエラーになるので、例外処理しておいた方がよいですね。
その他の回答 (4)
- watabe007
- ベストアンサー率62% (476/760)
こんにちは、参考に 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
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
配列としてデータを読み取りたいという要望ですが、 取扱可能なデータとして取り込む方法を書きます。 その方が実状に合っている気がしますので。 処理対象データが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)
とりあえず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)
以下の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
お礼
お返事遅くなりました。 SPLIT関数っていうのがあったんですね。 区切り文字もchr(10)で判断しようとしてましたが、vblfは分かりやすくていいですね。 とてもシンプルな式でこんなのを望んでいました。 ありがとうございましたm(_ _)m