Excel VBA質問箱 IV

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

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


7979 / 13644 ツリー ←次へ | 前へ→

【35730】セルの文字列を分ける AKIO 06/3/11(土) 12:12 質問[未読]
【35733】Re:セルの文字列を分ける Kein 06/3/11(土) 15:35 回答[未読]
【35743】Re:セルの文字列を分ける AKIO 06/3/11(土) 20:09 お礼[未読]

【35730】セルの文字列を分ける
質問  AKIO  - 06/3/11(土) 12:12 -

引用なし
パスワード
   こんにちは、初心者なので、よろしくお願いいたします。

B3のセルに以下のような文字列がありまして、
請求No.: 03897 表示枝番: 00 最終枝番: 00 請求書締年月日: 18/02/GE  (先頭は空白が入っています。)

これを処理するコードが
Range("B3").Select
  Selection.TextToColumns Destination:=Range("B3"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 9), Array(9, 2), Array(15, 9), Array(26, 9), Array(29, 9), _
    Array(41, 9), Array(44, 1), Array(61, 2), Array(70, 9)), TrailingMinusNumbers:=True

このようなもので、実行の結果文字列は、
B3→03897 C3→請求書締年月日: D3→18/02/GE
以上の文字列がそれぞれのセルに書き込まれます。

質問1
以上のコードをExcel2000ではエラーとなるので、どのようなコードにすれば
Excel2000でも同じ結果が得られるでしょうか?
質問2
このような空白が入った文字列が、何行も並んでいたとき(違う箇所に空白が入っている)
連続的に処理し、セルに分ける方法もあるのでしょうか?

よろしくお願いいたします。

【35733】Re:セルの文字列を分ける
回答  Kein  - 06/3/11(土) 15:35 -

引用なし
パスワード
   >Excel2000ではエラーとなる
どこでどんなエラーが出ているか書くこと。それが質問の基本です。
ちなみにTextToColumnsメソッドは Excel5.0 の時代からありますから、どのVersion
でも使えるメソッドなのですが。
>このような空白が入った文字列が、何行も並んでいたとき
>(違う箇所に空白が入っている)連続的に処理し、セルに分ける
TextToColumnsメソッドのヘルプを、全く調べてないことを暴露しているような
もんです。空白(仮にスペースとする)で区切るなら、

〜.TextToColumns DataType:=xlDelimited, _
ConsecutiveDelimiter:=True, Space:=True

などと「区切り文字を基準にした」セル分割の処理を選ばないといけない。
そのとき、先頭のスペースを無視しないと隣の列から入力されてしまうので、
分割する前に予め

For Each C In Range("B:B").SpecialCells(2)
  C.Value = Trim(C.Value)
Next

というようにして、先頭のスペースだけを取り除いておく。
>何行も並んでいたとき連続的に処理
という点については、TextToColumns の文字から推測できるように、処理対象が列単位
なので

Columns(2).TextToColumns 〜

というようにすれば出来るのです。これもヘルプを調べていれば分かることですよ。

【35743】Re:セルの文字列を分ける
お礼  AKIO  - 06/3/11(土) 20:09 -

引用なし
パスワード
   回答ありがとう御座います。
TextToColumnsメソッドではヘルプに一致する項目がないのですが、
TextToColumnsで調べればいいのですよね。

エラーは実行時"1004"のエラーが出ていたのですが、

〜.TextToColumns DataType:=xlDelimited, _
ConsecutiveDelimiter:=True, Space:=True

にて、動作いたしました。

その後コードを見て気がついたのですが、

DataType:=xlFixedWidth
となっているので、スペースではなく文字数で区切っているのかと
思い、これからTextToColumnsメソッドについて勉強してみます。
ありがとう御座いました。

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