- ベストアンサー
マクロでLen関数の使い方がわかりません
- マクロでLen関数の使い方がわかりません。基幹システムのデーターベースをエクセル出力する機能があります。その吐き出したエクセルファイルを使って印刷したり、別のシステムにインポートしています。
- データーの行数は吐き出すたび違います。吐き出したエクセルのD列にあるデータは必ず半角数字7桁固定長と決まっています。7桁に満たないデータは0で埋めて7桁になっています。
- エクセルに吐き出されると桁数が変わってしまいます。書式設定は[標準]でエラーマークが出ていて、数値が文字列として保存されています。印刷時は後者、インポート時には前者である必要があるので以下のようにE列は残したままF列に7桁表示を加えたいです。以下のマクロを作成しましたが動作しません。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (11)
- qualheart
- ベストアンサー率41% (1451/3486)
まず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 = "@" のようにセル書式を文字列に変えておく処理を入れておくと、なお良いですね。 ご参考まで。
お礼
大変申し訳ありません。 ダミーデータで実験していたので B列にデータでC列に複写だったので 質問した記述は Cells(行, 2) Cells(行, 3) になっています。申し訳ありません。 動作しなかったので Cells(行, 3).Value = myStr の位地を変えました。それが間違いでした。 動かなかった原因は Cells(行, 3).NumberFormatLocal = "@" でした。 そういう意味では質問が間違っていました。 「0が付かないのですが?」 が正しいです。 Case Len(n) が認識しないで Case Elseにとんでいると思って 動作しないとしてしまいました。 申し訳ありません。
- 1
- 2
お礼
わざわざ、ありがとうございます。 はい、今回の記述で正しく動作しました。 説明が悪くて申し訳ありません。
補足
さしつかえなかったら教えてください。 データがあるまで繰り返すループではなく 例えばセルH1に 234 と入っていて同じようにセルH1はそのままで セルB1に 000024 とするには .Range("B1").NumberFormatLocal = "@" .Range("B1").Value = Format(Range("H1").Value, "0000000") でいいのでしょうか? よろしくお願いします。