• ベストアンサー

VBAで数値を文字列にして入力したい

Range("A" & X).Value = Year(Date) Range("B" & X).Value = Right("0" & Month(Date), 2) このVBAでは セルの書式指定で文字列にしても 文字列の指定を外すと数値に戻ります。 でも、文字列の設定を外したら 数値に戻らないものもあり ピボットテーブルで集計した時に 同じ「2013」が2種類存在してしまいます。 どうしたらいいですか?

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.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") 【セル範囲の指定については適宜。左辺右辺ともに。】 何れの場合も、手作業で値を設定する時には、セルの書式・表示形式を変更しないよう注意が必要。 コピーしたものを貼り付ける時は、値のみ貼り付けするようにする、など。 他に検討するべきこととして、 そもそも日付は日付のままにした方がピボットテーブルでも扱い易いような気がしますけどどうでしょ。 (、、、ピボットテーブルは不得手な私ですが) セルの書式・表示形式で表示される成形すること、と、 値は本来あるべき型の値で扱うことを優先するべきこと、と、 まぁ、もし状況が許すならば、シートの設計を見直すのもありかも知れません。 、、、日常的な処理が簡潔になる方向で。 以上です。

mougmoug
質問者

お礼

凄く丁寧にありがとうござました!!!

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

>文字列の指定を外すと数値に戻ります。  ⇒あくまでもプロパティが変更されただけ、実データはものままですよ。   リアルタイムに実データも書式通りにするには、再編集(F2押下→Enter押下、又はダブルクリック)でしょうか。   よく分からないが「月」を2桁で表示したいだけなら、書式を00とかにしておき、数値で統一した方がよいと思います如何でしょうか。

mougmoug
質問者

お礼

それをやっているのですがうまく行かなかったのです。ありがとうございます!!!

関連するQ&A

  • VBAで文字列を数値に変換したい

    A列とE列の文字列になってしまった数値を 数値に変換したく、以下のようなものを作ったのですが、 文字の無いセルまで、数値に変換しようとするので 時間がかなりかかります。 何かよい方法は無いでしょうか? よろしくお願いいたします。 Sub 数値に変換() Range("A:A,E:E").Select For Each xCell In Selection xCell.Value = xCell.Value Next xCell End Sub 使用ソフトEXCEL2000orEXCEL2003

  • 文字列から数値への変換

    セルの書式設定(表示形式タブ)で文字列を数値に変えるのと、 VALUE関数で文字列を数値に変えるのとでは何か違いがありますか? (excel2000です。)

  • VBA 文字列と数値の混在

    Excel VBA 独学中の初心者です。独学中の初心者です。 データ型に関する以下の疑問についてお答えいただける方、よろしくお願い致します。 疑問1.「文字列 & 数値」でエラーにならず、結果は文字列になるようですが、これはVBAの規則上当たり前のことでしょうか。 疑問2.InputBox関数の戻り値は、Typeを省略した場合文字列と思いますが、これを数値型の変数に代入してもエラーは発生しませんでした。これも当たり前のことでしょうか。 具体例は以下です。 ------------------ Option Explicit Sub 文字列と数値の疑問() '初期設定 Cells.Clear Range("A1").Select '本題はここから Dim i As Long Dim j As Long Dim strRange As String Dim strInput As String '------------------ '疑問1の例 i = 2 strRange = "A" & i '疑問1:文字列と数値変数(長整数型)を文字列連結演算子で連結してもエラーにならない。・・・なぜ? '結果は1つの文字列→strRange ="A2" '例 Range(strRange).Select '動作OK Range(strRange) = i '動作OK '------------------ '疑問2の例 strInput = InputBox("選択行を入力してください", , "4") 'strInputは文字列型変数 j = strInput '疑問2:数値変数(長整数型変数)に文字型変数を代入してもエラーにならない・・・なぜ? '結果は長整数型変数(数値) j=4 (Input BOX をデフォルトでOKしたとき) '例:以下の両方とも動作OK '1) strRange = "A" & strInput '文字列 & 文字列 →文字列 strRange ="A4";疑問なし Range(strRange).Select '動作OK Range(strRange) = strInput '2) Cells.Clear '確認用にクリアスクリーン Range("A1").Select '確認用にセル位置移動 strRange = "A" & j '文字列 & 数値 →文字列 strRange ="A4";疑問1と同じ Range(strRange).Select '動作OK Range(strRange) = j '動作OK End Sub

  • VBA セルの値13が数値だったり文字列だったり

    セルに入った「13」が数値の場合でも文字列の場合でも処理出来る方法はありませんか? 例えば If Range("A1").Value=13 Then 処理 Endif セルの値が文字列"13"の場合、同じと認識してくれません。 いい方法はないでしょうか?

  • セル内の数値を少数以下の桁数指定を生かしたまま文字列として取り出したい

    VBA にて、セル内の数値の後に単位としての文字を付加して文字列として再度同じセルに入れたいのですが、うまく行きません。 例えば、少数以下3桁の数値の後に単位を付加して、1.234Vのように表示したいのですが、1.000など少数以下の数値がゼロの場合は1Vとなってしまいます。 同様に1.100は1.1Vとなります。 少数以下の桁数を数値によらず所定の桁数にする方法はありませんか。 因みに使用した式は  Moji = Range("C3").Value & "V" Range("C3").Value = Moji です。 "C3" の書式は数値の少数以下桁数を3桁としています。

  • VBAで文字列を数値に変換したい

    こんにちは! システムから自動で出力されるExcelファイルがあります。そのファイルを開くと数値が文字列として認識されています。いつも数値に直しているのですが、下記の方法でなおしています。 エラー チェック機能を使用して文字列形式の数値を変換する 他にも文字列を数値になおす方法は下記URLを参考にしています。 http://office.microsoft.com/ja-jp/excel-help/HP010342308.aspx ただ、これをVBAで変換できないかと思っています。 例えば、A~G列まで文字列データがはいっています。このA~G列のデータをVBAで一気に数値化したいのですが、どのようにすればおこなえるでしょうか?

  • エクセル 文字列で入力した数字を数値にする

    エクセルで、文字列の設定で入力した数字は、[セルの書式設定]で、数値として設定しても、文字列のままになります。 (セルの左上に、文字列と分かる緑の三角が付いたままになり、表を作ってもグラフの表示は出来ません。) 数値として数字を入力をした後、[セルの書式設定]で文字列にして、再び[セルの書式設定]で数値にすると、数値にはなります。 (この場合、文字列にしても、セルの左上に緑の三角が付かず、このまま表を作ると数値(小数点以下が0の場合は小数点以下が削除されます。)の扱いとなりグラフの表示が出来ます。) 文字列で入力した数字は、数値にはならないのでしょうか? よろしくお願いいたします。

  • VBAでセルデータの転記(文字列)

    VBAでセルのデータを下記のように他のセルに持っていく場合、文字として入れてある数字(例えば先頭に0がつくようなもの)は、自動的に数値に変えられて0が消えてしまいます。 また、長いものは指数表示になってしまい、15桁を超えるものは後ろが0になってしまいます。 持っていく先のセルを文字列に設定しておけばいいのでしょうが、持っていく元データが全て文字列ではなく、数値の場合もあります。 元データが数値であれば数値として、文字列であれば文字列として持っていくにはどうすればいいのでしょうか? Sub test() Cells(3, 3).Value = Cells(1, 1).Value End Sub

  • Excel VBA 入力規則

    Excel VBAで、下記の様なコードを見ましたが、IgnoreBlank の意味がよく分かりません。 入力規則の「空白云々」のことだと思いますが、よろしくお願いします。 Sub setKiValidation() Dim d As Date ld = DateSerial(Year(Range("$A$1")), Month(Range("$A$1")) + 1, 0) With Range("休日").Validation .Delete .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="1", Formula2:= _ "=DAY(DATE(YEAR($A$1),MONTH($A$1)+1,0))" .IgnoreBlank = True .InCellDropdown = True .InputTitle = Month(ld) & "月 休日" .ErrorTitle = Month(ld) & "月 休日" .InputMessage = "数値(1~" & Day(ld) & ") を入力してください" .ErrorMessage = "数値(1~" & Day(ld) & ") を入力してください" .IMEMode = xlIMEModeOff .ShowInput = True .ShowError = True End With ' =SUM(IF(B19:B22<>"",1/COUNTIF(休日,B19:B22),)) ' =AND(0<COUNTIF(休日,DAY(A3)),MONTH(A3)=MONTH($A$1))

  • エクセル2003で数値を文字列に

    Windowsのエクセル2003です。 すでに入力されている文字列13桁以上を 文字列に変換できないでしょうか? 入力していくうちに先頭に0が必要な場合も出てきて 困っています。桁数はまちまちなので書式設定でも出来そうにありません。VALUEやTEXTもうまくいきません。 書式で文字列にしても文字化けしてしまいます。 何かいい方法はございませんか?

専門家に質問してみよう