- ベストアンサー
配列での文字列の連続処理
- VBAで配列を使用して文字列の連続処理を行いたい場合、以下の手順を試してみることができます。
- まず、データを配列に読み込みます。
- 次に、配列をループして文字列の操作を行い、必要な部分を切り出してセルに書き込みます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やりたいのはこういう事かな? 文字数 = Len(元データ) ↓ 文字数 = Len(元データ(i, 1))
その他の回答 (2)
- yaritsusozai
- ベストアンサー率59% (50/84)
前半に、元データ = Range("D1:D3087")という記述があり、後半に、文字数 = Len(元データ)とあります。これを翻訳すると、D1~D3087の"範囲"の"文字数を"数えよ、というおかしな命令になります。これが、「型が合わない」というエラーになる原因です。 Lenを使う理由がよく解りませんが、Lenは、1個の文字列データが「何文字か」という事を数える関数で、「何個あるか」を数えるものではありません。 ですから、Len(たくさんのデータ)としても、Len(データの入ってる範囲)としてもエラーになります。 さて、具体的な解決策ですが、今回のように、セルD1~D3087という決まった範囲を参照する場合には、それをひとかたまりの「オブジェクト」として管理するのが定番です。 そして、そのオブジェクトからひとつずつデータを拾い上げて、加工なりなんなりするには、For Eachを使います。 取り出す1個1個のデータを、「個々のデータ(n)」と名付けるとすると、 Dim 元データ As Range Dim 個々のデータ(3087) As String Dim 番号 As Long Set 元データ = [D1:D3087] For Each i In 元データ 番号 = 番号 + 1 個々のデータ(番号) = i.value 'データの加工処理 Next i という感じのコードになります。
お礼
お忙しいところ本当にありがとうございます。 勉強になりました。 処理としては前回答者さんの方法で大丈夫でしたが 同じ処理でも色々な書き方があるんですね!! ありがとうございました!!!
- mayoke
- ベストアンサー率25% (16/62)
一括でVariant型の配列に入れるんじゃなく、 一旦String型の配列にループで格納するといいんじゃないですか? 3000行なら一瞬です。 また、上記は説明用の例なのかもしれませんが 上記例であれば、配列に入れるまでもないです。 単純にセル値のCOUNTをダイアログに出せばよさそうです。
お礼
お忙しいところ本当にありがとうございます。 元データからmidやright,leftで任意の文字列を取得したかったのです!!!
お礼
お世話になりました!!! お忙しいところ本当にありがとうございました!!! これでmidやright,leftで文字列を取得できそうです!!!