• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロでLen関数の使い方がわかりません。)

マクロでLen関数の使い方がわかりません

このQ&Aのポイント
  • マクロでLen関数の使い方がわかりません。基幹システムのデーターベースをエクセル出力する機能があります。その吐き出したエクセルファイルを使って印刷したり、別のシステムにインポートしています。
  • データーの行数は吐き出すたび違います。吐き出したエクセルのD列にあるデータは必ず半角数字7桁固定長と決まっています。7桁に満たないデータは0で埋めて7桁になっています。
  • エクセルに吐き出されると桁数が変わってしまいます。書式設定は[標準]でエラーマークが出ていて、数値が文字列として保存されています。印刷時は後者、インポート時には前者である必要があるので以下のようにE列は残したままF列に7桁表示を加えたいです。以下のマクロを作成しましたが動作しません。

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

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.8

ANo.4です。データの始まりはE1セルではなく、E2セルということでしょうか。 それなら、次のマクロでよいです。 Sub 七文字化() Dim 行 As Long For 行 = 2 To Range("E2").End(xlDown).Row Cells(行, 6).NumberFormatLocal = "@" Cells(行, 6).Value = Format(Cells(行, 5).Value, "0000000") Next 行 End Sub

gx9wx
質問者

お礼

わざわざ、ありがとうございます。 はい、今回の記述で正しく動作しました。 説明が悪くて申し訳ありません。

gx9wx
質問者

補足

さしつかえなかったら教えてください。 データがあるまで繰り返すループではなく 例えばセルH1に 234 と入っていて同じようにセルH1はそのままで セルB1に 000024 とするには .Range("B1").NumberFormatLocal = "@" .Range("B1").Value = Format(Range("H1").Value, "0000000") でいいのでしょうか? よろしくお願いします。

その他の回答 (11)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

まず1つE列に元の数があり、F列に複製して入力したいのであれば、 Cells(行, 2)はCells(行, 5)じゃないとダメですよね。 同じくCells(行, 3)はCells(行, 6)じゃないとダメですよね。 あとCells(行, 3).Value = myStrの位置ですが、End Selectの前ではなく、後に入れましょう。 これだけではCase ElseのときしかmyStrに代入した文字を入力しません。 End Select Cells(行, 3).Value = myStr と書くのが正しいです。 これでできると思います。 代入する前に Cells(行, 3).NumberFormatLocal = "@" のようにセル書式を文字列に変えておく処理を入れておくと、なお良いですね。 ご参考まで。

gx9wx
質問者

お礼

大変申し訳ありません。 ダミーデータで実験していたので B列にデータでC列に複写だったので 質問した記述は Cells(行, 2) Cells(行, 3) になっています。申し訳ありません。 動作しなかったので Cells(行, 3).Value = myStr の位地を変えました。それが間違いでした。 動かなかった原因は Cells(行, 3).NumberFormatLocal = "@" でした。 そういう意味では質問が間違っていました。 「0が付かないのですが?」 が正しいです。 Case Len(n) が認識しないで Case Elseにとんでいると思って 動作しないとしてしまいました。 申し訳ありません。

関連するQ&A