Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


61048 / 76732 ←次へ | 前へ→

【20309】Re:空白を含む1つの長いデータを分割し...
回答  Kein  - 04/12/4(土) 23:37 -

引用なし
パスワード
   先と同様に、Sheet2のA列に転記するとして

Sub Sp_Data()
  Dim nmAry As Variant, spAry(8) As String
  Dim i As Long, j As Long
 
  nmAry = Array(3, 3, 3, 2, 2, 2, 3, 3, 3)
  j = 1
  For i = 0 To 8
   spAry(i) = Mid$(Range("A1").Value, j, nmAry(i))
   j = j + nmAry(i)
  Next i
  Sheets("Sheet2").Range("A1").Resize(9).Value = _
  WorksheetFunction.Transpose(spAry())
  Erase nmAry, spAry
End Sub

これは9個に分割するという前提のコードですが、実際には nmAry には、200個分の
文字数を表す要素を書かなければなりません。
カンマの後ろに半角スペースと行継続文字を入れて、複数行の要素を記述して下さい。
そして spAry(199) As String と宣言し、For i = 0 To 199 とカウンタの上限を
「分割する数 - 1 」に変更します。
>Sheets("Sheet2").Range("A1").Resize(9).Value
のところは、分割する数と一致した行数を Resize の引数に渡します。つまり
.Resize(200) になるわけです。
さらに、A列に並んだデータを連続して処理するなら

Sub Sp_Data2()
  Dim nmAry As Variant, spAry(8) As String
  Dim i As Long, j As Long
  Dim C As Range
 
  nmAry = Array(3, 3, 3, 2, 2, 2, 3, 3, 3)
  For Each C In Range("A1", Range("A1").End(xlDown))
   j = 1
   For i = 0 To 8
     spAry(i) = Mid$(C.Value, j, nmAry(i))
     j = j + nmAry(i)
   Next i
   Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1) _
   .Resize(9).Value = WorksheetFunction.Transpose(spAry())
   Erase nmAry, spAry
  Next
End Sub

ということになりますが、シートの終端行を超えて入力することは出来ないから、
300行ぐらいが限界と考えて下さい。

0 hits

【20281】空白を含む1つの長いデータを分割したい 初心者です 04/12/4(土) 12:16 質問
【20282】Re:空白を含む1つの長いデータを分割したい かみちゃん 04/12/4(土) 12:27 発言
【20294】Re:空白を含む1つの長いデータを分割したい Kein 04/12/4(土) 14:57 回答
【20299】Re:空白を含む1つの長いデータを分割し... 初心者です 04/12/4(土) 17:42 質問
【20304】Re:空白を含む1つの長いデータを分割し... かみちゃん 04/12/4(土) 19:07 回答
【20309】Re:空白を含む1つの長いデータを分割し... Kein 04/12/4(土) 23:37 回答
【20318】Re:空白を含む1つの長いデータを分割し... 初心者です 04/12/5(日) 13:13 お礼

61048 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free