人に聞けない痔の悩み、これでスッキリ >>

お世話になります。
仕事で英文小文字を大文字に変換する必要があり、
普段は関数「=UPPER(セルの番号)」を使っております。

今、マクロの勉強をしているため、ネットで少し調べてみたら

http://oshiete.goo.ne.jp/qa/502583.html
が見つかりました。

早速、ページの内容を確認して、
関係ない部分を削除したところ、
以下のようになりました。

-----------

Sub Macro1()

Dim i, j As String

i = 1 '行番号
j = 1 '列番号

myString = Cells(i, j)
myString = UCase(myString) '大文字

Cells(i, j) = myString

End Sub

-----------

試してみたところ、
A1セルに入力した小文字から大文字に変わります。
なのでこのマクロは機能しており問題ありません。


問題はここからで、セルの番地がA5からA10に入った小文字を
大文字にするために、変数の定義を付け加え
以下のように更新しました。

ところがいざ「実行」させてみると
「中断モードでコードを実行することはできません。」
というエラーメッセージでマクロが機能しません。

こういった状況です。お手数ですがエクセルのマクロに詳しい方、説明の上手な方、
よろしくお願いします。

-----------

Sub Macro1()

Dim i, As long
Range ("A5")

For i = 5 To 14

myString = Cells(i, j)
myString = UCase(myString) '大文字

Cells(i, j) = myString

Next i

End Sub

-----------

質問者からの補足コメント

  • A5からA10に入った小文字(半角英数)をマクロで大文字(半角英数)にするための、プログラム、変数の使い方について教えて下さい。

      補足日時:2016/04/27 00:55
  • GooUserラックさん、tom04さん、WindFallerさん、
    ご回答ありがとうございます。みなさんのご回答のとおり全部試してみました。
    どの回答もためになるアドバイスで助かりました。

    試してみた詳細はお礼のところに記載しました。
    機会がありましたら、またお願いします。

      補足日時:2016/04/28 01:22

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

A 回答 (3件)

こんにちは!



>A5からA10に入った小文字(半角英数)を・・・

範囲がA5~A10と決まっているのであれば

Sub Sample1()
Dim i As Long
For i = 5 To 10
Cells(i, "A") = UCase(Cells(i, "A"))
Next i
End Sub

とか

Sub Sample2()
Dim c As Range
For Each c In Range("A5:A10")
c = UCase(c)
Next c
End Sub

くらいで大丈夫だと思います。m(_ _)m
    • good
    • 1

こんにちは。



>「中断モードでコードを実行することはできません。」
久々、勉強させていただきました。

片方のマクロが何らかの原因で、マクロが止まった状態で、別のマクロを動かそうとした時に出るエラーです。止まっている状態のマクロを終わらせてあげれば動きます。

ご質問の答えとしては、
「中断モードでコードを実行することはできません。」
の対処法は

VBEditor 画面で
--------------
▶ || □
-----------
を見ていただくと、▶のところが明るくになっていて、|| が押せないようになっていますから、■ を押していただければ、マクロは止まります。

内容を修正します。

Sub Macro1()
         '修正部分
Dim i, As long  'Dim i As long, j as Long
          'Dim myString As String
          j =1
Range ("A5")   'Range("A5").Select

For i = 5 To 14

myString = Cells(i, j)
myString = UCase(myString) '大文字  本来は以下の1行で足りる
Cells(i, j) = myString    'Cells(i,j) = UCase(Cells(i, j))

Next i

End Sub
------------------
というような感じにはなりますが、入門レベルでは、変数の宣言はあまり厳密にしなくてもよいと思います。最初は、Dim i, j, myString と型を入れません。
もし型を入れる場合は、整数型なら、Long, 文字型なら、String, オブジェクト型は、Object, ワークシートの数字の場合は、Double と決めてしまってもよいです。Sheet, Workbook という型も使うことも増えてくるかもしれません。

Excelは、64bit 時代に入っても、未だ32bit が主流ですが、変数の型は、それだけに、ややこしいかもしれません。

また、VBA関数は、VBAの入門編としては、3部のある内の2部に入るはずです。VBAには、文字列関数が多いようです。なかなか覚えきれないというのが正直なところです。だから、後回しになることも多いものです。なれない内は、一覧表で確認したほうがよいかもしれません。

リンク先の質問は、ちょっと趣旨が違うかもしれません。そちらの質問者さんの求めている答えには正解は出ていないようです。ベストアンサーではあっても、答えのコードではないと思います。
    • good
    • 0
この回答へのお礼

いろいろアドバイス頂きありがとうございます。

中断モードの件、参考になりました。

内容の修正の件もわかりやすい書き方で、不足しているところが見やすく、助かりました。

変数の件ですが、今の私のレベルは「整数型なら、Long, 文字型なら、String, 」だけなんとなくわかるくらいです。

こちらに質問しながらマクロの勉強をするつもりなので、
機会がありましたらまたお願いします。

今回はいろいろ説明して頂きありがとうございました。

お礼日時:2016/04/28 02:01

2ヶ所ある「(i, j)」を「(1,i)」に直せば良いと思います。


定義していない変数「j」が使われていたのでエラーになっているだけです。
判っていると思いますが、For ~ Next の間は次の1行でもOKです。
「Cells(1,i).Value=UCase(Cells(1,i).Value)」
また「.Value」を付ける癖をつけた方が良いと思います。
    • good
    • 0
この回答へのお礼

教えて頂きありがとうございます。

「2ヶ所ある「(i, j)」を「(1,i)」に直せば良いと思います。」とのことなので、入力してみたところ以下のようになると思います。

「実行」してみたところ「構文エラー」というメッセージで「 Dim i, As long」というところが赤い文字になり、途中で止まってしまいました。

止まった理由が今の私ではわかりませんが、No.3のWindFallerさんの構文と少し違うので、これから勉強する時のヒントになると思います。

機会がありましたら、またお願いします。回答して頂き、ありがとうございました。

-----------
Sub Macro1()

Dim i, As long
Range ("A5")

For i = 5 To 14

myString = Cells(1, i)
myString = UCase(myString) '大文字

Cells(1, i) = myString

Next i

End Sub
-----------

お礼日時:2016/04/28 01:28

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

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

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

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

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

Qエクセルで小文字が大文字になる。

エクセルで半角小文字で「i」を入力すると自動的に大文字の「I」になるときがあります。
ならないときもあります。
全角英数で「I」と入力し変換後小文字で「i」と出しても無理でした。
仕事で必要なためすごく困っています。教えてください。

Aベストアンサー

過去の質問を参照してください。「エクセル」「大文字」で検索しました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=47837
http://oshiete1.goo.ne.jp/kotaeru.php3?q=19555

QExcel 内の英小文字を大文字にupper lowerではなく変換する方法?

windows2000 excel 2000を使っています。

英小文字を大文字に又はその逆を一気に変換したいのです。
upper lowerでは そのセルには変えられないでしょ。
ワードのように一度にできる方法はないでしょうか

Aベストアンサー

マクロはいかがでしょうか?

UCaseは小文字を大文字に、LCaseは大文字を小文字に変換します。

以下のマクロを[ツール]-[マクロ]-[Visual Basic Editor]
の標準モジュールに貼り付け、
i,jに変換したいセルの番地を入れて実行してください。

なお、多数のセルに対して行いたい場合には、i,jがその番号になるように
ループを組めばよいです
小文字にしたい時にはLCaseが書いてある行の先頭の'をはずしてください。

Sub Macro1()

i = 1 '行番号
j = 1 '列番号
myString = Cells(i, j)
myString = UCase(myString)
'myString= LCase(myString)
Cells(i, j) = myString
End Sub

Qローマ字の「i」、小文字のはずが大文字に?

エクセルを使って表を作る際に
ローマ字で セルにラベルをつけたりすることがよくあるのですが
そのとき、h,i,j,,,の「i(アイ)」が どうもかってに 大文字になってしまうのです。
どうしてでしょう?設定の問題でしょうか。小文字で打てるようにする方法を教えてください。
「l(エル)」の小文字とごっちゃになってしまい とても不便なのです。。。

Aベストアンサー

こんにちは。
ツールバーの[ツール]→[オートコレクト]
をクリックして、オートコレクトの設定画面を開きます。
「文の先頭文字を大文字にする」のチェックをはずしてOKします。
これでどうでしょう?
また、かってに文字が置き換わるのが嫌なのであれば、ここの項目全てチェックはずしちゃえばおっけーですよ。

Qエクセルで英数大文字のみの入力制限は可能ですか

エクセルで、半角英数のみの入力制限を「日本語入力オフ」で
やっていますが、それにさらに「大文字」のみの入力制限をか
けることは可能でしょうか。

「CapsLock」ができれば良いのですが、パソコンをあまり知ら
ない人が入力するためのファイルを作成しています。

Aベストアンサー

再度のチャレンジです。
セルA1にこれを入れてみてください。
1.「入力規則」-「ユーザー設定」-「数式」-「=EXACT(UPPER(A1),A1)」
2.日本語コントロールを半角英数
これが精一杯の方法だと思います。
これで
ABC←可 Abc←不可 abc←不可 AbC←不可
英数が完全に大文字でないと入力できないようになりました。
数字、半角カナも入力できます。
これも制限する場合はまた検討します。

Qカタカナを小文字から大文字にするには?

エクセル
  A B
1 ぁ =UPPER(A1)
2 a =UPPER(A2)

B1は何も変わらず「ぁ」
B2は「A」になります。

UPPERはカタカナでは使えないのですか?
カタカナを小文字から大文字にしたいときは
一つ一つ置換などをマクロで組んで置き換えるしかないですか?

Aベストアンサー

今晩は。
1.全角のアルファベット、数字、記号、カタカナを半角にするには:ASC
2.1の逆は:JIS
3.アルファベットの大文字を小文字にするのは:LOWER
4.3の逆は:UPPER
です。

QExcelVBAでセルをクリックしてユーザーフォームを表示するには

OfficeExcel2003を使用しています。
ユーザーフォームのテキストボックスやコンボボックスに文字や数値を入力し、OKボタンを押せばエクセルのセルに記入できるようにしようと思ってます。
フォームはなんとか(形だけですが..)作成できたのですが、そのフォームを呼び出す方法として、入力したい行のA列のセルをクリックすればユーザーフォームが表示されるようにしたいのです。
ネット上でいろいろ検索してみましたがなかなか見つけることができませんでした。
初歩的な質問かもわかりませんが、教えて頂けないでしょうか。
宜しくお願い致します。

Aベストアンサー

シートモジュールに下記を入れる。
A列をダブルクリックするとユーザーフォームが起動
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub
UserForm1.Show
End Sub

QVBA エンターキーでイベントに入りたい。

テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。
これと全く同じコーディングでVB6は正しく動きます。(ただし、Pvate Sub text1_KeyPress(KeyAscii As Integer)に変更してます。)
<コーディング>
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Msgbox "通過"
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
End If
End Sub

これが出来ると、そのつどキーボードから手を離さずに済むので作業効率がグンとあがります。どうかよろしくご教示ください。Excel2003SP3

Aベストアンサー

こんにちは。

>ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。

>Excelで実際にこのコードを実行していただけませんか。

ご自身のコードが間違いがないと思い込んでいられるから、そういう発言をされるのだと思いますが、ここでのお話の前提は、あくまでも、VBAです。VB6ではありません。

私が、期待通りの反応を示さないので、「実際にこのコードを実行してください」とおっしゃっているようですが、はっきり言えば、その最初のコードは、VBAでは間違っています。それに気がついてください。

質問のコードのままのコードでは、Enter キーのイベントは、取れないのです。別にPCの故障でもソフトの問題でもないし、こちらが試していないわけでもありません。

Visual Basic とVBAは、細かい点で違います。

VBAのこの種のイベントの KeyAscii では、VB6 で取れる、EnterキーのKeyAsciiの 「13」 は、取れません。 KeyAscii は、MSForms.ReturnIntegerとなって、Integer ではありません。

だから、私は、その代わりとして、KeyDown イベントを使えばよいとしているわけなのです。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = vbKeyReturn Then
  MsgBox "Enterキーが入りました", 64
  'KeyCode =0
 End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 MsgBox "通過"
End Sub

こんにちは。

>ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。

>Excelで実際にこのコードを実行していただけませんか。

ご自身のコードが間違いがないと思い込んでいられるから、そういう発言をされるのだと思いますが、ここでのお話の前提は、あくまでも、VBAです。VB6ではありません。

私が、期待通りの反応を示さないので、「実際にこのコードを実行してください」とおっしゃってい...続きを読む

QEXCELで大文字入力

こんにちは。
EXCELで任意の列を常に大文字で入力するにはどうしたら良いでしょうか?
既存のデータを変換するのではなく、入力の際にCAPSLOCKを押す手間を省ければ…と思います。
何か良い方法があれば教えて下さい。

Aベストアンサー

#3です。
誠にすみません。
#3は別質問の回答を挙げてしまいました。
ーー
本質問ですが
入力シートSheet1として、そのシートのChangeイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target = StrConv(Target, vbUpperCase)
Application.EnableEvents = True
End Sub
を入れておくと、
全角英字、半角英字の入力の場合、大文字になります。
ただしシートのどのセルに入力してもそうなるので、ある列に限定とかしなければならないので、コードの訂正や、コード実行時の指定列の応答など面倒で、CAPSLOCKを押す手間とくらべて、勝てないでしょう。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Qエクセルマクロで変数を使ったセル範囲指定

Dim x As Long
Dim y As Long
として

x = Range("A1").End(xlDown).Row
For y = 1 To x
としました。

このときRange("A" & y)からRange("A" & x)を範囲指定したいときは
どのように記述すればよいのでしょうか?

Aベストアンサー

次のようにすればよいでしょう。

Sub セルの範囲指定()
Dim x As Long
Dim y As Long
x = Range("a1").End(xlDown).Row
For y = 1 To x
Range(Range("A" & y), Range("A" & x)).Select
Next
End Sub


人気Q&Aランキング