🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

1300閲覧

ExcelのVBAでループ部分が上手く行かないのでご教授ください。

tetsuya71

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/10/08 21:59

エクセルで画像の様な表を作っています。
エクセル画像

B13→B14→B15→C13→C14→C15→D13・・・
とインプットボックスを使って入力していきたいと思い、

Sub データ入力()
Dim kataban As String

'データ入力範囲を認識し、終端セルを選択する

If Range("B13").Value = "" Then
Range("B13").Select
Else
Range("B12").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If

'データを入力するダイヤログボックスを表示する Do While ActiveCell.Offset(0, -1).Value <> "" kataban = InputBox("大問NO.を入力します" & Chr(10) & _ "終了する場合はendを入力してください", "大問") If kataban = "end" Then Exit Do Else ActiveCell.Value = kataban ActiveCell.Offset(0, 1).Select ActiveCell.Value = InputBox("領域名を入力します", "領域名") ActiveCell.Offset(0, 1).Select ActiveCell.Value = InputBox("得点数を入力します", "得点") ActiveCell.Offset(1, -2).Select End If Loop

End Sub

の様なマクロを作成したのですがループの部分が上手く行きません。

どなたかわかる方がいましたら、ご教授の程よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/10/08 22:28

教授 → 教示
imihito

2019/10/08 22:55 編集

> ループの部分が上手く行きません。 どのように上手く行かないのですか? 「○○のように動作して欲しいが、××となってしまう」のように目的の動きと現状の動きを、質問に追記してください。 e.g. 左隣の列(A列)に「国語」と入っている範囲(13行目から17行目まで)をDo...Loopでループして欲しいが、13行目の入力まででループが止まってしまい、14行目以降に進まない。
guest

回答1

0

B13→B14→B15→C13→C14→C15→D13・・・
とインプットボックスを使って入力していきたいと思い、

んと。
入力したいセル範囲選択→セルの書式設定→保護
と選んで、
ロックのチェックを外しOK

リボンの校閲タブ→シートの保護で、
ロックされてないセルの選択以外のチェックを外してOK
で、
期待した動きになるかと思いますが、
インプットボックスが必須ですかね?
複数セルを編集出来るのがエクセルの強みなのに、
それを捨ててまで制御するほどの業務とは思えませんが。。。
なぜ、インプットボックスなのでしょう?


一応、コード書いてみました。
Activecellとかはできれば使いたくないです。
状況に依存するので。。

ExcelVBA

1Sub test001() 2 Dim rngInput As Range 3 Dim c As Range 4 Dim sProm As String 5 Dim sValue As String 6 Const cProm As String = _ 7 "を入力してください。" & vbLf & "(キャンセルで終了)" 8 9 Set rngInput = Range("B13:D17") 10 For Each c In rngInput.Cells 11 c.Select 12 sProm = Intersect(c.EntireColumn, rngInput.Rows(0)).Value 13 sValue = InputBox(sProm & cProm, sProm, c.Value) 14 If StrPtr(sValue) = 0 Then Exit For 15 c.Value = sValue 16 Next 17End Sub

操作したい範囲に対して繰り返し処理をするように書きます。

投稿2019/10/08 23:46

編集2019/10/09 03:06
mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問