• ベストアンサー

エクセルVBAの自動変換機能?

エクセルVBAをwebで検索しながらプログラムしている初心者です。 VBEで入力していると変数名などの大文字・小文字を自動変換してくれる機能があると思いますが,そのことでの質問です。 いつもFor~Nextのループ処理を使う時,変数"a"とするのですが(For a=0 to 7 ~Next a),それが入力の最中突然"A"に変換されました。すると,そのExcel内のすべてのVBAの変数"a"が"A"に,Cells(r,c)がcells(r,c)になりました。 大文字・小文字で入力し直しても,勝手に変換されてしまいます。 プログラム自体は支障はなく動いているのですが,理由が判らず気持ち悪いです。どうしてこうなったのか,どうしたら直るのかご教授お願いします。

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

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

Dim Cells と宣言してみましたか? 一度宣言したら、その宣言文は消しても良いです。

fishchips
質問者

お礼

2度目のご回答ありがとうございます。 仰る方法で直りましたっ!"A"も"cells"も直りました! 「一度宣言したら,その宣言文は消しても良い」・・眼からウロコです。 『何故なったのか?』の疑問は残りますが,自分の入力ミスがないとは言い切れませんので追求しないことにします(^^; お陰様でスッキリしました。ありがとうございます。

その他の回答 (3)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

cellsに関しては、過去に一度、 Dim cells と宣言したことはありませんか? 改めて、 Dim Cells と宣言し直せば、Cellsがcellsに勝手に変換されることはなくなります。

fishchips
質問者

補足

ご回答ありがとうございます。 宣言文をあまり理解していないため一切使用してません。 逆にまったく宣言していないことがいけないのでしょうか・・

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

Sub test01() Dim A For A = 1 To 10 Next i End Sub (意味のないコードですが辛抱して) Dim  のAと ForNextのAを色々変えて見てください。 Dim の変数定義が優先されるのが判ります。 これはこれで私には、納得できます。

fishchips
質問者

お礼

ご回答ありがとうございます。 宣言文,お勉強します。。

fishchips
質問者

補足

ご回答ありがとうございます。 宣言文をあまり理解していないため一切使用してません。 なのに・・・

  • laputart
  • ベストアンサー率34% (288/843)
回答No.1

Dim A As integer と宣言している場合は 変数a は自動的にAに変換されます その逆も真 宣言していない場合は、A =123 として 次に a= a+1 とすると後から使った方に統一されるようです。

fishchips
質問者

お礼

素早いご対応ありがとうございます。1番乗り回答ということでポイント発行させていただきました。

fishchips
質問者

補足

ご回答ありがとうございます。 宣言文をあまり理解していないため使用してません。また,入力が面倒臭い(^^;ため大文字も使用しないのです。 なのに・・・

関連するQ&A

  • EXCEL VBAの書き方

    EXCEL VBAの初心者です。 EXCEL2003を使っています。 数式の中のパラメータの書き方が分からず困っています。 具体的には、単純な計算をR1C1形式の数式を使い、FOR文でループを回そうとしました。 この際、例えば以下のようなVBAを、試行錯誤の結果やっと動くようにはなりましたが、とくに「"」(ダブルクォーテーション)の使い方が理解できていません。 NGだった理由、OKとなった理由を、すみませんがお分かりの方教えていただけないでしょうか。 (ヘルプを読んでも残念ながら理解できる程のレベルを持っていません。) やりたいこと:例えば単純な引き算を複数のセルに、ループをまわして設定したい。 --------------- Sub 質問() Dim i As Integer ' "A1"との差を求めるVBA→ "B2"から"E2"に数式入力 For i = 2 To 5 Cells(2, i).Select ' (1)問題の行→これはOKの例 ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[" & 1 - i & "]" Next i End Sub --------------- ' (2)問題の行→実行時エラー'1004' ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[1 - i]" --------------- ' (3)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["1 - i"]" --------------- ' (4)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["&1 - i&"]" ---------------

  • エクセルのマクロについて 文字列操作について

    文字列操作で困っています。 A3セル以下、A列に、04/、03/、99/。。。と文字列が入力されており、それぞれ、最初の2文字を取り出して数字に変換し、それぞれを変数 qwe1 qwe2 qwe3 ... に代入したいのです。 そのための構文が知りたいのです。 また、文字列のまま、たとえば上記の/を、変数 asd に代入するにはどうしたらよいのでしょうか? ちなみに、 Range("B3").Select ActiveCell.FormulaR1C1 = "=VALUE(MID(R[-2]C[1],1,2))" という形の構文で、一旦エクセルのセルに代入して、再度、変数に放り込む形だとうまくいくのですが、数列、数十行同じ作業を繰り返すために、for next 構文を使わないと、不便で使い物になりません。 そこで、R[-2]C[1] の部分に cells(qwe,1)を使ってもエラーが出てうまく作動しませんでした。 なお、エクセル2003、OS=XPです。 再度要約しますと、 1.文字列の一部を取り出して数字に変換し、それを変数に代入したい。 2.文字列の一部の文字を取り出して、それを変数に代入したい。 3.上記1,2を繰り返すので、その繰り返すことが出来る構文が知りたい。 以上です。 どなたか教えてください。

  • ExcelのVBAで漢字検索

    ExcelのVBAのエディターで漢字を検索しようと入力をすると単漢字変換しかできません。熟語で変換しようとすると文字化けします。(Excel2003) これは、バグでしょうか? (VBE-編集-検索-検索する文字列での入力) どなたか?詳しい方いますか? 教えてください。 宜しくお願いします。

  • ExcelのVBA

    ExcelのVBAにてFor~Nextのプログラム処理中に スペース等の指定したボタンを押したらプログラムの処理を終了させる事はできるのですか? どうすれば良いのかわからないので教えてください。

  • VBA(エクセル)で『17.10.11』を『平成17年10月11日』の変換出力

    エクセルのVBAでプログラムをつくりました。 その内容はシート1でいくつかセルに値を入力した後、 マクロを実行すると指定したセルのそのままの内容が、シート2へコピーされるというものです。 そこで『日付』を入力する欄があるのですが、 そこには『17.10.11』と入力する欄があるのです。 これをシート2へコピー出力するときに 『平成17年10月11日』という風に方変換して 出力したいのです。どうすればいいでしょうか? どうか教えていただけたらうれしいです。 ちなみにコピープログラムはこんな感じにしています s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") A1セルに日付を入れる欄があるのでここを型変換して出力したいのです。助けてください。

  • エクセルVBAで

    エクセルのVBAでA列に平仮名全角で文字が入力されているデータをB列にローマ字に変換して入力するようにするということは可能でしょうか? 宜しくお願いします。

  • VBAによる数値変換がうまくいきません

    仕事で必要なIDの変換ツールを、EXCELを使って作っています。 いつもは手動で変換しているのですが、頻繁に作業を行わなければならないのと、作業が煩雑で入力ミスも多いため、それを防ぐためにプログラムで自動化してしまおうと考えています。 変換前  変換後  1000   1001  1001   1001  1002   1002  1003   1002  1004 → 1001  1005   1001  1006   2002  1007   1003  1008   1001  1009   1004  1010   1099 このような4~5桁の数字を、変換表にしたがってマクロで自動変換するように、ネットで見つけたVBAのプログラム文に手を加え作っているのですが、一部の数字がうまく変換できません。 ・数字の変換に関して、特に法則のようなものはありません。すべて変換表にしたがって変換しています。 ・変換しなければならないIDの数は、100個以上あります。 現在のVBAのプログラムは、以下の通りです。 Sub 変換() Dim ws As Worksheet Dim idx As Long Application.ScreenUpdating = False ActiveSheet.Copy after:=ActiveSheet ActiveSheet.Name = "変換後" Set ws = ActiveSheet With Sheets("変換表") For idx = 1 To .Cells(65536, 1).End(xlUp).Row If .Cells(idx, 1) <> "" Then ws.Cells.Replace What:=.Cells(idx, 1).Value, Replacement:=.Cells(idx, 2).Value, _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False End If Next idx End With Application.ScreenUpdating = True End Sub VBAやマクロに関する知識がほとんど無いので、何が原因なのか、どこに原因があるのかが分かりません。 どなたか詳しい方、お力を貸してください。 よろしくお願いします。

  • エクセル関数とVBA関数で意味が違うのは多いのか

    エクセル関数とVBA関数で意味が違うのは多いのでしょうか? セルA1に「A」と入れ、 B1に「=ASC(A1)」と入れると B1は「A」になります。(半角) VBE画面で Sub test() Debug.Print Asc("A") End Sub を実行すると、-32160 になります。 ヘルプより エクセルでは=全角 (2 バイト) の文字を半角 (1 バイト) の文字に変換します。 VBAでは=指定した文字列内にある先頭の文字の文字コードを返す変換関数です。 となっていますが 同じ関数でも全く意味違うのでびっくりしています。 こういうことは頻繁にあるのでしょうか? (VBAのASC関数のかわりのエクセル関数は、CODE関数でした。)

  • エクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

    エクセル関数 → VBAへの変換 現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。 理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の 式を入れたいからです。 なので、エクセル関数を以下のようにVBAにいれていました .Cells(7, 51).Formula = "C6&E6" しかし、これを以下のようにすると、エラーになってしまいました。 .Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため 同様に、以下のものがすべてエラーになります。 .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" どうすればよろしいでしょうか?

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

専門家に質問してみよう