質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

1128閲覧

VBAでのゼロパディングのままでコピーしたい

kingkamehameha

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/02/06 08:26

000123など頭に0が付いたものをカウントしてコピーする中で、ゼロパディングが消えてしまうのを解消したい。

先に貼り付け先のシートを文字列にしておいて、書き込んだ際に消えないようにしているが、代入する段階で消えてしまいます。これを回避するにはどうすれば宜しいでしょうか?

wkが

VBA

1Worksheets.Add(After:=Worksheets(Worksheets.Count)) _ 2.name = ("Sheet2") 3With Intersect(ActiveSheet.UsedRange, Columns("A")) 4 .NumberFormat = "@" 5 .Value = .Value 6End With 7 8'得意先コードの転記と行数の集計 9Dim i As Long, db, wk, db1, wk1 10Set db = CreateObject("Scripting.Dictionary") 11Set db1 = CreateObject("Scripting.Dictionary") 12With Sheets("sheet1") 13For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row 14 wk = .Cells(i, "B") 15 db(wk) = db(wk) + .Cells(i, "B") 16 wk1 = .Cells(i, "A") 17 db1(wk1) = db1(wk1) + .Cells(i, "A") 18 Debug.Print (wk & " " & " " & wk1 & " ") 19Next 20 Worksheets("Sheet2").Cells(1, "A").Resize(db.Count) = Application.Transpose(db.Keys)

イミディエイト(ログ)

出金支払先コード 支払通知番号 000892 739119000309 000892 739119000309 000892 739119000309 000892 739119000309 000892 739119000309 000892 739119000309 004050 739119000310 004050 739119000310 004050 739119000310 004050 739119000310 004050 739119000310 004050 739119000310 004050 739119000310

代入結果(Sheet2)

出金支払先コード 892 4050 コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2020/02/06 08:30

wk,wk1の型をVariantではなくStringにするとどうなりますか?
kingkamehameha

2020/02/06 08:34

Y.Hさん 回答有難う御座います。 Dim i As Long, db, db1, wk, wk1の部分ですよね、String型にするとエラーが出てしまいます。オブジェクト型ではないと。
Y.H.

2020/02/06 08:40 編集

cells()はRangeオブジェクトを返します。Excelのセルに表示している文字列を取得したいので wk = .Cells(i, "B").Text wk1 = .Cells(i, "A").Text にしてみてください。 ・・・結局最後の行実行時に頭の0が消えてしまうかもしれませんが・・・
kingkamehameha

2020/02/06 08:45

Y.Hさん .Textを加えたモノで実行してみましたが、やはり0が消えてしまいます。Transposeで代入する前と後でセルの書式が、文字列→標準に切り替わっているのも気になります。
Y.H.

2020/02/06 08:57 編集

最終手段で"'"つけてしまいます。 要件満たせるでしょうか・・・ wk = ”’” & .Cells(i, "B").Value wk1 = ”’” & .Cells(i, "A").Value
kingkamehameha

2020/02/09 09:16

Y.H.さん ありがとうございます、無事要望を満たすことができました。
guest

回答2

0

Sheet2の書式設定がA1だけしか設定されてません。A列全てを文字列にする必要があります。
以下のようにしてください。

VBA

1 Worksheets.Add(After:=Worksheets(Worksheets.Count)) _ 2 .Name = ("Sheet2") 3 With Sheets("Sheet2") 4 Columns("A:A").Select 5 Selection.NumberFormatLocal = "@" 6 End With 7

投稿2020/02/08 04:36

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

勘で回答します。

db(wk) = db(wk) + .Cells(i, "B")

ここで足し算をしているので、ハッシュに入る値は数値に変換されていると思います。
つまりデバッグ文で出しているのとハッシュに入っているものは別物です。

ここの処理は具体的に何がしたいのでしょうか?
B列の値をキーにB列の値をどんどん足しこんでいくのですか?
単純に代入したいのであれば、db(wk) = wkでいいような気がします。

投稿2020/02/06 09:10

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問