• ベストアンサー

エクセルVBA ユーザー定義の値を変数に格納したい

Excel2003を使っています。 ユーザ定義を使ってセルへの入力をします。 例えば、 セルB1に AB1111 セルC1に AB2222 セルD1に AB3333 セルE1に AB4444 セルF1に AB5555 と入力します。 4桁の数字の前に"AB"が決まって付くので、ユーザー定義 "AB"##0000 を使って数字4桁だけ入力するようにしました。 そしてさらに、 エクセルVBAを使って、変数iに AB1111 を格納したいのですが、iには 1111 しか取得できません。 iに AB1111 を取得したいのですが、どなたか方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

RangeオブジェクトにValue(または省略)して参照した場合 値が格納されますが、Textで参照した場合は表示形式で取得することが出来ます。 Sub sumple()   Dim i As String   i = Range("B1").Text   Msgbox i End Sub

kasetsu
質問者

お礼

ご回答ありがとうございます。参考にさせていただいたところ、出来ました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>ユーザ定義を使ってセルへの入力をします の意味がよくわからない。舌足らずと思う。 セルへの入力は 列方向として 1111 2222 3333 と入力し、セルの書式設定のユーザー定義の"AB"0000で AB1111 AB2222 AB3333 のように見えてます。 それをVBAでセルの値を拾うとき、 AB1111 AB2222 AB3333 のような値にしたいなら Sub test01() For i = 1 To 3 MsgBox Cells(i, "A").Text Next i End Sub が参考になろう。

kasetsu
質問者

お礼

ご回答ありがとうございます。参考にさせていただきました。

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.2

dim i as string i="AB" & range("B1").value セルの値をcells()を用いfor~nextステートメンテで変数に格納するつもりなら、変数名を一次配列で宣言すると良いのでは。

kasetsu
質問者

お礼

ご回答ありがとうございます。参考にさせていただきました。

関連するQ&A

  • エクセル ユーザー定義について 

    A列に、下記のような数字が300以上入力されています。 すべて頭は、10000の5ケタです。 すべての数字を頭の5ケタを、省いた数字に、簡単にする方法を教えてほしいです。 書式→セルのユーザー定義で、設定すればいいのでしょうか? 1000011598 →11598 1000011602 →11602 1000011610 →11610 1000012599 1000011619 1000011627 1000082523 1000082526 1000011640 1000072855 1000011656 1000042511 1000011678 1000011686 1000099999 1000011807 1000011810 1000011830 1000033333

  • VBAでユーザ定義変数名をシートから取得したい

    VBAでユーザ定義型変数を宣言する際、 要素名をシートに記述した名称にすることは可能でしょうか? 【例】 シート「Sheet1」のセルA1とA2に 「SYAIN_NO」と「SYAIN_NM」が入力されています。 ユーザ定義型変数syainの要素名1と要素名2をシートから名称を取得し [取得前] Type syain 要素名1 As Long 要素名2 As String End Type [取得後] Type syain SYAIN_NO As Long SYAIN_NM As String End Type にしたいです。 今後、シートに名称を追加することで変数を拡張したいと考えています。

  • ExcelのVBA。public変数の値が消える

    VBAについて。Excelの2003や2007を使っています。標準モジュールで public 変数を定義しました。 ユーザーformを使い、パブリック変数に値を入れたり変更し、標準モジュールに戻ったとき、そのpabulic変数が resetされてしまっている事があります。全く同じマクロで、この現象が起こることと、起こらないことがあります。excelの2003でも2007でも、同じ現象が起こります。簡単なマクロで再現性のある具体的なものを示したいと思い、試しましたが、できませんでした。簡単なマクロでは、きちんとパブリック変数は保持されています。問題のあるマクロはかなり長いものなので、とても示せません。問題がどこにあるのかわかりません。このマクロで不都合があるという具体的なマクロを示すことができない状態での質問で、申し訳ありません。 また、このようなプログラミングをしていて思ったのですが、ユーザーフォームに対してユーザーが任意の引数を渡す方法あるいは、ユーザーフォームから引数を受け取る方法はあるのですか?今は、pubulic変数を用いたり、具体的なセルに値を代入したりしていますが、どう考えてもそれはエレガントではないし、汎用性もないと思います。引数で引き渡すのが一番綺麗でいいとは思うのですが、それが可能かどうかわかりません。

  • エクセルのユーザー定義関数で(VBA)

    エクセルのVBAで、セルに「=SheetName」と書き込めば、その関数を書き込んだセルが属するシート名をセルに代入さるようなユーザー定義関数を作りたいと考えています。 で、標準モジュールに Public Function SheetName(test) SheetName = ????? End Function と、書き込んでふと止まりました。 ユーザー定義関数を書き込んだシートの名前ってどうやって取得すればいいのでしょうか?VBでいうSenderみたいなのってあるんでしょうか? どなたか?詳しい方教えて頂けないでしょうか? 宜しくお願いいたします。

  • VBAの中でユーザー定義関数を使うときに

    VBAの中でユーザー定義関数を引数に変数を持たせて使いたいのですが、変数をうまく認識してくれません。 VBAの中でユーザー定義関数を使うにはどうしたらいいのでしょうか? よろしくお願いします。

  • エクセルVBA:変数の疑問?

    vba初心者です。 ちょっと疑問に思ったので質問します。 変数1 = XXXXX 変数2 = XXXXX 変数3 = XXXXX 変数4 = XXXXX 変数5 = XXXXX For i = 1 To 5 XXXX.YXXXX("変数" & i).xxxxx Next i 以上の様に"変数名 + 数字"の様な型を定義した場合 この、数字部分を生かしてループ処理などは可能なのでしょうか?

  • エクセルで設定したユーザー定義がうまく表示されません

    エクセルで、A列に入力されている9桁の数字の3文字目の後ろにハイフンを入れたくて、A列を選択し、ユーザー定義で 000-000000 と登録しましたが、うまく表示されません・・・ 確かにユーザー定義の「種類」には、登録されています。 しかし、(例えばA1の)セルを選択した後に一度F2キーを押してカーソルを表示させ、その状態でEnterを押すと、ハイフンが表示されます。 一つ一つF2→Enterを繰り返せば出来ないことはないのですが、データの数が多い為、一度に直せればうれしいのですが・・ この現象の原因はなんなのでしょうか? そしてどうすれば直せるのでしょうか? 教えてください。

  • エクセル ユーザー定義で「00****」と表示

    エクセルで既に入力されている数字を、ユーザー定義で6桁に足らない場合は左側に「0」をつけるように書式設定しました。 この「00****」(B1のセル)を別のセルの「**」(A1のセル)を合わせて「**-000***」(C1のセル)というデータにしたいです。 「C1」のセルに、「A1&"-"&B1」という数式を入れてみましたが、「**-****」となるだけで、左側に付けた「00」が無くなりました。 どうすればよいのでしょうか? ちなみに、現在はA1及びB1に入っている数字は半角なのですが、最終的には全角で「**-00****」というデータにしたいので、「=JIS(C1)」を使うつもりです。

  • VBAの変数の定義について

    いつもお世話になっております。 VBAでの変数の定義についてお尋ねします。 VBAの勉強を始めたばかりの超初心者です。 I.チェック:A列とC列の和をE列に記載してその正誤を判定。 II.リセット:E列をクリアし、A列、C列の数字をランダムに置き換える。 という練習問題のコードを私が書いたものです。 以下について質問させていただきます。 (1)下記はモジュールレベルでの変数の宣言になると思いますが、変数の定義?例えば、最終値 = Range("A4").End(xlDown).Rowはそれぞれのプロシージャで定義しなければならないのでしょうか? (2)モジュールレベルでの変数の宣言は,Dimではなく、Privateでやるべきなのでしょうか? (3)何か指摘事項があれば、教えてください。 超初歩的な質問で、申し訳ありませんが、よろしくお願いいたします。 Option Explicit Dim i As Integer '処理用カウンタ変数 Const 初期値 As Integer = 4 '表の最初 行 Dim 最終値 As Integer '表の最終 行 Sub チェック() 最終値 = Range("A4").End(xlDown).Row '表の最終行番号を取得 For i = 初期値 To 最終値 Step 1 If Cells(i, 1).Value + Cells(i, 3).Value = Cells(i, 5).Value Then 'A列+B列 Cells(i, 5).Font.Color = vbBlue '回答が正ならフォントを青 Else Cells(i, 5).Font.Color = vbRed '回答が誤ならフォントを赤 End If Next i End Sub Sub リセット() 最終値 = Range("A4").End(xlDown).Row '表の最終行番号を取得 For i = 初期値 To 最終値 Step 1 Cells(i, 5).ClearContents '回答をクリア Cells(i, 5).Font.Color = vbBlack '回答のフォントを黒 Cells(i, 1).Value = Int(Rnd * 100) 'A列にランダムな数値 Cells(i, 3).Value = Int(Rnd * 100) 'C列にランダムな数値 Next i End Sub

  • VBAで変数に改行を格納した場合

    セルA1に あああ いいい と入れて、 VBAで Dim str As String str = Range("a1") と言うコードを記述して、ステップモードでstrにカーソルを充てると あああいいい と、変数が格納されるのですが、 変数の値は改行されては表示されないのですか? うぃっちウインドウで監視すると、若干空白があるように感じます。 でも私はよくF8で変数にカーソルを充てて今の値を見るのですが 変数に改行があるかどうかは、この方法ではわからないということですか?

専門家に質問してみよう