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

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

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

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

Q&A

解決済

1回答

954閲覧

Excel Dictionaryオブジェクト(連想配列)のキーと値(通貨型)をセルに代入する場合の型

nekoyama771

総合スコア29

VBA

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

0グッド

0クリップ

投稿2023/01/29 07:40

Excel Dictionaryオブジェクト(連想配列)のキーと値(通貨型)を
セルに代入する場合、処理を速く終えるため、連想配列をセル範囲に
一括で代入したいと思っています。
しかし、連想配列から一括で値をセットする場合、
通貨型が文字列として出力され、文字列から数値への変更処理(※)が
必要になります。

※の処理を不要にする、もしくは列を範囲として一度で文字列から
通貨に処理をする方法はないでしょうか。
・一つづつ値をセルに代入する→B列は通貨
・一つづつ値を配列にセットし、配列をセル範囲に代入する→B列は通貨
方法では、B列は通貨になりました。

VBA

1Sub dicPaste() 2 Dim dic As Variant 3 Set dic = CreateObject("Scripting.Dictionary") 4 dic.Add "A0001", CCur(500) 5 dic.Add "A0002", CCur(300) 6 dic.Add "A0003", CCur(400) 7 dic.Add "A0004", CCur(500) 8 dic.Add "A0005", CCur(300) 9 dic.Add "A0006", CCur(400) 10 11 Dim key As Variant 12 Dim i As Long 13 i = 1 14 15' ' 一つづつ値をセルに代入する→B列は通貨 16' For Each key In dic.keys 17' Sheet1.Cells(i, 1) = key 18' Sheet1.Cells(i, 2) = dic(key) 19' i = i + 1 20' Next 21 22' ' 一つづつ値を配列にセットし、配列をセル範囲に代入する→B列は通貨 23' Dim myarray 24' ReDim myarray(1 To dic.Count, 1 To 2) As Variant 25' For Each key In dic.keys 26' myarray(i, 1) = key 27' myarray(i, 2) = dic(key) 28' i = i + 1 29' Next 30' Sheet1.Range("A1:B" & dic.Count).Value = myarray 31 32 ' 一括で値をセットする→B列は文字列 33 Sheet1.Cells(1, 1).Resize(dic.Count, 1).Value = Application.Transpose(dic.keys) 34 Sheet1.Cells(1, 2).Resize(dic.Count, 1).Value = Application.Transpose(dic.Items) 35' ' 文字列から数値への変更処理が必要 36' For i = 1 To dic.Count 37' Sheet1.Cells(i, 2).Value = CCur(Sheet1.Cells(i, 2).Value) 38' Next i 39 40End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

通貨型だとTransposeで文字列に変換されてしまうみたいですね。
数値型(Doubleなど)なら数値型のままのようです。
Dictionaryには数値型で格納しておいてあとで書式を通貨に設定するのではどうでしょう。

vba

1Sub dicPaste() 2 Dim dic As Variant 3 Set dic = CreateObject("Scripting.Dictionary") 4 dic.Add "A0001", CDbl(500) 5 dic.Add "A0002", CDbl(300) 6 dic.Add "A0003", CDbl(400) 7 dic.Add "A0004", CDbl(500) 8 dic.Add "A0005", CDbl(300) 9 dic.Add "A0006", CDbl(400) 10 11 ' 一括で値をセットする→B列は文字列 12 Sheet1.Cells(1, 1).Resize(dic.Count, 1).Value = Application.Transpose(dic.keys) 13 Sheet1.Cells(1, 2).Resize(dic.Count, 1).Value = Application.Transpose(dic.Items) 14 Sheet1.Cells(1, 2).Resize(dic.Count, 1).NumberFormatLocal = “\#,##0;-\#,##0”

投稿2023/01/29 08:44

編集2023/01/29 09:11
hatena19

総合スコア33715

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

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

nekoyama771

2023/02/02 12:35 編集

ありがとうございます。 通貨型は文字列型に変換されてしまうのですね。 通貨型ではなく数値型で連想配列には格納し、書式を通貨に設定します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問