エクセルVBAをwebで検索しながらプログラムしている初心者です。
VBEで入力していると変数名などの大文字・小文字を自動変換してくれる機能があると思いますが,そのことでの質問です。

いつもFor~Nextのループ処理を使う時,変数"a"とするのですが(For a=0 to 7 ~Next a),それが入力の最中突然"A"に変換されました。すると,そのExcel内のすべてのVBAの変数"a"が"A"に,Cells(r,c)がcells(r,c)になりました。
大文字・小文字で入力し直しても,勝手に変換されてしまいます。

プログラム自体は支障はなく動いているのですが,理由が判らず気持ち悪いです。どうしてこうなったのか,どうしたら直るのかご教授お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

Dim Cells


と宣言してみましたか?
一度宣言したら、その宣言文は消しても良いです。
    • good
    • 2
この回答へのお礼

2度目のご回答ありがとうございます。

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

お礼日時:2009/05/29 17:06

cellsに関しては、過去に一度、


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

この回答への補足

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

補足日時:2009/05/29 14:51
    • good
    • 0

Sub test01()


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

この回答への補足

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

なのに・・・

補足日時:2009/05/29 14:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 17:13

Dim A As integer


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

この回答への補足

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

なのに・・・

補足日時:2009/05/29 14:45
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 17:11

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q1キーで大文字/小文字を切り替えたい

1キーで大文字/小文字を切り替えたい

現在Windows 7でMicrosoft IMEを使用しています。

ローマ字の大文字と小文字を切り替えるときにはShiftキーとCapslock/英数キーを同時に押すのが標準だと思います。

ただ仕事がら大文字/小文字の切り替えが非常に多く、2つのキーを押すのがひどく面倒に感じられ、この機能を1つのキーに割り当てられることができればどんなにいいだろうと思っています。

たとえばCapslock/英数キーを押すだけで大文字と小文字が切り替わると助かります。

そこで[Microsoft IMEのプロパティ]→[編集操作]→[キー設定]→[変更]を探るのですが、それらしき項目は見当たりません。

Microsoft IMEの設定でなんとかならないでしょうか?あるいは何らかのソフトウェアを導入して解決できないでしょうか?

よろしくお願いします。

Aベストアンサー

英語キーボードを使ってみてください。
英語キーボードですと、CapsLockはシフトを押さず
単独で動作してくれます。

質問者さんが「仮名入力」しかできないならば
英語キーボードはお薦めできませんが、
「ローマ字入力」をすることが可能ならば
英語キーボードの方が楽に打てるはずです。

英語キーボードは2000円くらいから販売されています。

Q「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現在のセル( n , "A" )より14行上に数値がないことを確認するために
'14行上のセルを全て足し算しています。
For m = n - 14 To n - 1
s = s + Worksheets("Sheet1").Cells(m, "A").Value
Next

'足し算結果がゼロならば何も記入していないと判断し、
'数字の「1」を記入します。
If s >= 1 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 0
ElseIf s = 0 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 1
End If
End Sub

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現...続きを読む

Aベストアンサー

はいはい了解。

今着目しているセルが (n,1)であるとする。

条件: 今いるところから上に14行サーチして、一度でも1か2の値が見つかったら
     回答を0とする。14行すべてに1・2の値がひとつも含まれていなければ1とする。



Ans = 1

for i = 1 to 14

x = cells ( n - i , 1 ).value

if x = 1 or x = 2
then
Ans = 0
endif
next i


cells ( n , 1 ) = Ans


デフォルトの回答値=1としておき、一回でも条件にヒットしたら回答値=0にする。
ヒットしたらfor~nextを強制的に閉じてもいいけど、面倒なのでそのまま14回検索する。

Qアルファベットの小文字・大文字切り替えについて

言語バーの「直接入力」にて英字を入力する際に、いつもならシフトキーを押しながら入力することで(通常が小文字なら)大文字になるのですが、いくらシフトキーを押しながら入力しても全く変わらなく(小文字のままに)なってしまいました。

パスワード等は小文字大文字を区別するので困っています。言語バーの「半角入力」でF8やF9を押すことで対応はしていますが、どこに不具合があるか、どなたか教えていただけますでしょうか。

Aベストアンサー

原因と対応を探ってみました。

1. ソフトウェアの問題

1.1. 設定変更
 あまり考えられませんが、何かの設定により Shift キーを無効にしていませんか?
 先ほど、Delete キーを無効にしてしまったという質問を見ましたので、可能性があるかもしれません。

2. ハードウェアの問題

2.1. 物理的な故障
 Shift キーを押し込めない状態になっていませんか。
(1) キーの下に異物が入っているため(大量のゴミなど)キーが十分下がらない。
(2) 飲み物をこぼしたなどの原因で、キーの軸が周囲に張り付いて動かなくなっている。

2.2. 電気的な故障
 Shift キーの接点が、接触不良を起こしている。

原因としては、これらが考えられます。

対応は、以下の方法をお試し下さい。

1.1. 設定変更
 これが原因の場合は、設定を元に戻してください。

2.1. 物理的な故障
 掃除機でゴミを吸い取るか、エアダスターでゴミを吹き飛ばしてみてください。
 次には、キートップを外して(かなり力が要ります)内部が正常に動くか確認してみてください。
 キートップを外すときは、
 キートップリムーバーという道具がありますが入手は手間がかかるので、
 ドライバーの先端を使うか(下記のページの2番目の写真を参考に)、
 http://www.infovaio.net/pcv-s/key/
 針金を輪にしたものを作り、引っ掛けて抜きます。
 (私が先日キーボードを掃除したときのやり方です。下記のページの中段の写真を参考に)
 http://park16.wakwak.com/~ex4/kb/news0202.htm
 ゴミが残っている場合は、取り除いてください。

 ここで、軸がきちんと上下するかも確認してください。

 動かない場合は(2)の問題で、洗浄処理が必要です。

2.2. 電気的な故障
 これまでの対応が当てはまらない場合は、電気的な故障と考えられます。
 この場合は、キーボードの分解・修理が必要です。

自分で直せない場合は、(ノートの場合は)修理に出す、
(デスクトップの場合は)買い替えることを検討してください。
また、Shift キーは普通は左右に一つずつあるので、片方が使えるなら多少の不便は我慢して、使い続けることもありかもしれません。

原因と対応を探ってみました。

1. ソフトウェアの問題

1.1. 設定変更
 あまり考えられませんが、何かの設定により Shift キーを無効にしていませんか?
 先ほど、Delete キーを無効にしてしまったという質問を見ましたので、可能性があるかもしれません。

2. ハードウェアの問題

2.1. 物理的な故障
 Shift キーを押し込めない状態になっていませんか。
(1) キーの下に異物が入っているため(大量のゴミなど)キーが十分下がらない。
(2) 飲み物をこぼしたなどの原因で、キーの軸が周囲に張り...続きを読む

Q以下のFor Nextで「Nextに対するForがありません」とコンパ

以下のFor Nextで「Nextに対するForがありません」とコンパイルエラーが出ます。どこが悪いのか教えてください。

Sub 品番検索()
'
' Macro1 Macro
'
Application.Goto Reference:="Macro1"
'
Dim hinban As String
Dim y, n
y = 16
hinban = InputBox("品番を入力してください。", "品番入力", "ABC-123")
For n = 2 To 200
A0 = Worksheets("履歴RW").Cells(2, n)
A1 = Worksheets("履歴RW").Cells(2, n + 1)
A2 = Worksheets("履歴RW").Cells(2, n + 2)
A3 = Worksheets("履歴RW").Cells(2, n + 3)
A4 = Worksheets("履歴RW").Cells(2, n + 4)
A5 = Worksheets("履歴RW").Cells(2, n + 5)
A6 = Worksheets("履歴RW").Cells(2, n + 6)
A7 = Worksheets("履歴RW").Cells(2, n + 7)
A8 = Worksheets("履歴RW").Cells(2, n + 8)
A9 = Worksheets("履歴RW").Cells(2, n + 9)
If hinban = A0 Then
Worksheets("発注FM").Cells(y, 2) = A0
Worksheets("発注FM").Cells(y, 3) = A1
Worksheets("発注FM").Cells(y, 4) = A2
Worksheets("発注FM").Cells(y, 5) = A3
Worksheets("発注FM").Cells(y, 6) = A4
Worksheets("発注FM").Cells(y, 7) = A5
Worksheets("発注FM").Cells(y, 8) = A6
Worksheets("発注FM").Cells(y, 9) = A7
Worksheets("発注FM").Cells(y, 10) = A8
Worksheets("発注FM").Cells(y, 11) = A9
y = y + 1
Else
Next
End Sub

以下のFor Nextで「Nextに対するForがありません」とコンパイルエラーが出ます。どこが悪いのか教えてください。

Sub 品番検索()
'
' Macro1 Macro
'
Application.Goto Reference:="Macro1"
'
Dim hinban As String
Dim y, n
y = 16
hinban = InputBox("品番を入力してください。", "品番入力", "ABC-123")
For n = 2 To 200
A0 = Worksheets("履歴RW").Cells(2, n)
A1 = Worksheets("履歴RW").Cells(2, n + 1)
A2 = Worksheets("履歴RW").Cells(2, n + 2)
...続きを読む

Aベストアンサー

「Else」を「End If」に変える。

Q大文字と小文字が混ざったパスワードの入力の仕方

大文字と小文字が混ざったパスワードの入力の仕方

大文字と小文字が混ざったパスワードを入力する場合。
「SHIFT」+「CAPS LOCK」ボタンを押して切り替えていますが、
●●●表示しか出ず、入力した文字が大文字か小文字の確認出来ず、
困っています。何か良い裏技が有れば教えて下さい。

使用OS:VISTA HP SP-2
使用ブラウザ:IE-8

Aベストアンサー

>「SHIFT」+「CAPS LOCK」ボタンを押して切り替えていますが、
普通の使い方は小文字モードで入力し、大文字のときだけShuftを押しながら英文字を押します。
大文字が大幅に多い場合はシフトロック(Shuft+Caps)して操作を逆転します。
IEでのパスワード入力では他のエリアへタイプしてそれをカット&ペーストする方法も有効です。
右クリックでペースト出来ない場合でもCtrl+vでペーストできると思います。

QFor next使う場合、next iはできない?

vbsでFor next使う場合、next iはできないのですか?

for i = 1 to 2
msgbox ""
next i

をすると
"ステートメントの末尾が不正です"800A401
になります。

しかし
for i = 1 to 2
msgbox ""
next
にすると、問題ないです。

VBAではnext iでも実行できるけどVBSではだめなのでしょうか?
理由を教えてください。

Aベストアンサー

Excel2003(Office2003)は持ち合わせていないので、2002の場合なら・・
VBE上で
for i = 1 to 2
msgbox ""
next i
となっていたら、for の所にカーソルを持って行って、F1 キーを押せば
該当すると思われるものがピックアップされます。
あるいは、For まで打ち込んで、F1 とか
イミディエイトウィンドウ(Ctrl + G で出現)で、For まで打ち込んで、F1 とか
2002なら
---------------------
For キーワード
キーワード For は、次の構文で使用します。
For...Next ステートメント
For Each...Next ステートメント
Open ステートメント
-------------------------
となりますので、For Each...Next ステートメント をクリックすると
前回回答のがでます。
たしか、2002の場合はVBAのヘルプはインストール時のオプション扱いだった記憶・・
2003は分かりません。
蛇足ですがOffice2010のVBAのヘルプは今までで一番使いやすいです。
ところが2013では
『以前のバージョンの Office に付属していた開発者用リファレンス ヘルプ ファイルは、セットアップから削除され、
Microsoft Developer Network (MSDN) で参照できるようになります。』
だとさ (-"-)
http://technet.microsoft.com/ja-jp/library/cc178954%28v=office.15%29

VBSのヘルプは、ここから
http://www.microsoft.com/ja-jp/download/details.aspx?id=1406
scd56jp.exe をダウンロードして
実行するとインストール先を聞いてきます。OSがWinXPなら既定のフォルダは
C:\Program Files\Microsoft Windows Script\ScriptDocs
ですので、そこから script56.chm だけをお好きな所にコピーします。
他のものに用は無いので、コントロールパネルからアンインストールしてください。
または解凍ソフトをインストールして
http://win.just4fun.biz/WSH/WSH%E3%81%AE%E3%83%98%E3%83%AB%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%85%A5%E6%89%8B%E6%96%B9%E6%B3%95.html
にて。

Excel2003(Office2003)は持ち合わせていないので、2002の場合なら・・
VBE上で
for i = 1 to 2
msgbox ""
next i
となっていたら、for の所にカーソルを持って行って、F1 キーを押せば
該当すると思われるものがピックアップされます。
あるいは、For まで打ち込んで、F1 とか
イミディエイトウィンドウ(Ctrl + G で出現)で、For まで打ち込んで、F1 とか
2002なら
---------------------
For キーワード
キーワード For は、次の構文で使用します。
For...Next ステートメント
For Each...Next ステートメント
...続きを読む

Q大文字と小文字入力の方法を教えてください

大文字と小文字入力の方法を教えてください

ローマ字入力で、ネット上のあるサイトへパスワードを大文字小文字を混ぜて入力したいのですが、入力し始めると●がいくつかつきます。言語バーは半角英数状態であとは反応がないです。
どうしたら大文字と小文字入力の切り替えと入力ができますか?

Aベストアンサー

Caps Lock キーの状態を確認しましょう。
ランプが点灯していると大文字を入力する状態になっています。ランプが消灯していれば小文字入力状態です。

これは大文字と小文字の入力を切り替えるキーです。キーボードの一番左の縦一列の中にあります。
ほとんどのキーボードには Caps Lock が on になると該当するランプが点灯するようになっています。
スタンダードなキーボードでは、キーボード上の右上に「Number Lock」「Caps Lock」「Scroll Lock」の順でランプが並んでいますから
これらのランプの状態を確認しましょう。

さて多くのキーボードでは、Caps Lock キーを押しただけでは大文字と小文字の切替はできません。
Shift キーを押しながら Caps Lock キーを押すとこの切替ができることが多いようです。

また、Shift キーを押しながら 英数字を入力すると、大文字と小文字を一時的に切り替える事ができます。


メモ帳などで動作の確認と入力の練習をしてみてください。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

Q拡張子はなぜ、大文字と小文字のものがある?

WindowsXPを使っています。
拡張子を表示させる設定にすると、
大文字のものと小文字のものがあることに気がつきました。
ほとんど小文字なんですが、たとえば.WMVは大文字です。
なぜ、大文字と小文字のものがあるのでしょうか?

Aベストアンサー

マイクロソフトのMS-DOSやWindowsでは、大文字小文字の区別がありません。
大文字で表示しても、小文字で表示しても同じファイルと認識されます。

UNIXでは大文字小文字が区別され、別のファイルと認識されます。
これで、ファイル名のつけ方が大幅に増えることになります。
試しに、何倍になるか計算してみてください。

注意して欲しいのは、インターネットのサーバーではUNIXが使われていること。
Windowsの世界では、大文字小文字の区別がなく、インターネットの世界では大文字小文字の区別があることです。

windowsでは正常にリンクされていたものがサーバーにアップロードするとリンクエラーになってしまうことがよくあります。

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング