- ベストアンサー
VBAで数値を文字列にして入力したい
Range("A" & X).Value = Year(Date) Range("B" & X).Value = Right("0" & Month(Date), 2) このVBAでは セルの書式指定で文字列にしても 文字列の指定を外すと数値に戻ります。 でも、文字列の設定を外したら 数値に戻らないものもあり ピボットテーブルで集計した時に 同じ「2013」が2種類存在してしまいます。 どうしたらいいですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。お邪魔します。 「どうしても文字列でなければならない」理由は見当たらないようですし、 「数値であれ文字列であれ統一されること」こそ肝要ということのようですが。 ◆1 「数値で扱えるものは数値」という合理主義で、、、 セルの書式・表示形式を設定する"一回永続的な"処理 Range("A2:A25").NumberFormat = "0000" Range("B2:B25").NumberFormat = "00" 既存のセル値を数値に統一する"一時的な"処理 Range("A2:B25").Value = Evaluate("--A2:B25") 各セルの値を設定する"日常的な"処理 Range("A" & X).Value = Year(Date) Range("B" & X).Value = Month(Date) どうしても文字列、と、訳あり、な場合で、、、 ◆2 「何が何でも文字列を堅持するように扱いたい」という保守主義で、、、 セルの書式・表示形式を設定する"一回永続的な"処理 Range("A2:B25").NumberFormat = "@" 既存のセル値を文字列に統一する"一時的な"処理 Range("A2:A25").Value = Application.Text(Range("A2:A25"), "'#") Range("B2:B25").Value = Application.Text(Range("B2:B25"), "'00") 各セルの値を設定する"日常的な"処理 Range("A" & X).Value = "'" & Year(Date) Range("B" & X).Value = Format(Date, "'mm") ◆2 「とりあえず文字列になればいいや」という楽観主義で、、、 セルの書式・表示形式を設定する"一回永続的な"処理 Range("A2:B25").NumberFormat = "@" 既存のセル値を文字列に統一する"一時的な"処理 Range("A2:A25").Value = Application.Text(Range("A2:A25"), "#") Range("B2:B25").Value = Application.Text(Range("B2:B25"), "00") 各セルの値を設定する"日常的な"処理 Range("A" & X).Value = Year(Date) Range("B" & X).Value = Format(Date, "mm") 【セル範囲の指定については適宜。左辺右辺ともに。】 何れの場合も、手作業で値を設定する時には、セルの書式・表示形式を変更しないよう注意が必要。 コピーしたものを貼り付ける時は、値のみ貼り付けするようにする、など。 他に検討するべきこととして、 そもそも日付は日付のままにした方がピボットテーブルでも扱い易いような気がしますけどどうでしょ。 (、、、ピボットテーブルは不得手な私ですが) セルの書式・表示形式で表示される成形すること、と、 値は本来あるべき型の値で扱うことを優先するべきこと、と、 まぁ、もし状況が許すならば、シートの設計を見直すのもありかも知れません。 、、、日常的な処理が簡潔になる方向で。 以上です。
その他の回答 (1)
- mu2011
- ベストアンサー率38% (1910/4994)
>文字列の指定を外すと数値に戻ります。 ⇒あくまでもプロパティが変更されただけ、実データはものままですよ。 リアルタイムに実データも書式通りにするには、再編集(F2押下→Enter押下、又はダブルクリック)でしょうか。 よく分からないが「月」を2桁で表示したいだけなら、書式を00とかにしておき、数値で統一した方がよいと思います如何でしょうか。
お礼
それをやっているのですがうまく行かなかったのです。ありがとうございます!!!
お礼
凄く丁寧にありがとうござました!!!