アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
仕事で英文小文字を大文字に変換する必要があり、
普段は関数「=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

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が見つからない時は、教えて!gooで質問しましょう!