質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

Q&A

解決済

2回答

2023閲覧

VBA超初心です。Do until loopのとこでバグになってしまうのですが

MasaDiego

総合スコア6

VBA

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

0グッド

0クリップ

投稿2020/02/11 01:05

Sub 予約実行()
Set 入力 = Worksheets("入力画面")
Set 台帳 = Worksheets("登録台帳")
月 = 入力.Cells(20, 3)
日 = 入力.Cells(20, 4)
名前 = 入力.Cells(20, 5)
時間帯 = 入力.Cells(20, 6)
縦 = 6
Do Until 台帳.Cells(縦, 2) = " "
縦 = 縦 + 1
Loop
台帳.Cells(縦, 2) = 月
台帳.Cells(縦, 3) = 日
台帳.Cells(縦, 4) = 名前
台帳.Cells(縦, 5) = 時間帯
入力.Cells(20, 3) = " "
入力.Cells(20, 4) = " "
入力.Cells(20, 5) = " "
入力.Cells(20, 6) = " "
End Sub
Sub 予約確認()
Set 入力 = Worksheets("入力画面")
Set 台帳 = Worksheets("登録台帳")
月 = 入力.Cells(7, 4)
日 = 入力.Cells(8, 4)
For 縦 = 6 To 100
If 台帳.Cells(縦, 2) = 月 Then
If 台帳.Cells(縦, 3) = 日 Then
横 = 台帳.Cells(縦, 5) + 4
利用 = 9
Do Until 入力.Cells(利用, 横) = " "
利用 = 利用 + 1
Loop
入力.Cells(利用, 横) = 台帳.Cells(縦, 4)
End If
End If
Next
End Sub

何がまちがっているのでしょうか?
お願いします。

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

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

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

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

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

maisumakun

2020/02/11 01:12

どのような状態となりましたか?エラーメッセージや、起こった現象について教えていただけましたら幸いです。
MasaDiego

2020/02/11 01:38

maisumakunZ様、返信どうもありがとうございます。 "アプリケーション定義またはオブジェクト定義のエラーです" というのがでます。
guest

回答2

0

ベストアンサー

Do Until 台帳.Cells(縦, 2) = " "

↑は、セルの値が、半角スペースが入っていたらループを抜ける
という意味になってます。

半角スペースは「空白に見える文字」なので、
「空白」とは違います。
なので、ひたすらシートの最後まで見て行って、
これ以上下のセルはないので、指定出来ないという状態になってます。

Do Until 台帳.Cells(縦, 2) = ""

こうやったら、一応、意図通り判定は出来ると思いますが、
「""」も長さ0の文字列という意味であり、厳密には空白とは違います。
空白は「Empty」という定数で示されますので、
Do Until 台帳.Cells(縦, 2) = Empty

とやるか

Do Until isempty(台帳.Cells(縦, 2)) = true

とIsEmpty関数で空白かどうかを評価してください。

ちなみに、ループをしなくても、
範囲を特定できるので、普通にコピペでもいいかなと思いました。

ExcelVBA

1Sub 予約登録() 2 Dim rngFrom As Range 3 Dim rngTo As Range 4 5 Set rngFrom = Worksheets("入力画面").Range("C20:F20") 6 With Worksheets("入力画面").Range("B6").CurrentRegion 7 Set rngTo = .Resize(1).Offset(.Rows.Count) 8 End With 9 rngFrom.Copy rngTo 10 rngFrom.ClearContents 11End Sub

あと、余談ですが変数の宣言はちゃんとされるようにした方が良いです。

変数って宣言しなくちゃいけないの?
変数宣言を強制しないといけないのか。


思ったのと違うところに数字が入りました。

なるほど。。。。。
↓ここを見て理解できるでしょうか?
Excel(エクセル) VBA入門:セル範囲の指定方法
プロパティ、メソッドの探り方 マクロ記録とF1のHelpを使う
どんな本を読んでいらっしゃるかわかりませんが、

勉強不足です。すいません。

今から勉強されるんだからしらなくて当然と思います。
解らないこと気になること、どんどん聞いて勉強してください。
あと、ネット上にも情報はたくさんありますので、
わからない用語等はどんどん検索してください。

投稿2020/02/11 01:50

編集2020/02/11 04:40
mattuwan

総合スコア2163

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

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

MasaDiego

2020/02/11 02:46

mattuwan様 返信ありがとうございます。 うー、空白はスペースすら空けないということはわかりました。 ただ変数宣言や、上に書き換えてくださったコードはもう全くわかりませんで。上のコードをそのままコピペでやってみましたら、エラーはなくなりましたが、思ったのと違うところに数字が入りました。  このコードも本に乗っているのをそのまま写しただけでして。丁寧に答えに書いてくださったのに、それすらも理解できないです。勉強不足です。すいません。
otn

2020/02/11 12:21

言葉の使い方の問題ですが、何も入ってないのは、「空白」じゃなくて「空」です。 「空白」は普通は、キーボードのスペースバーを押して入力される文字のことです。
guest

0

Do Until 台帳.Cells(縦, 2) = " "
→→→→→→→→→→→→→→↓
Do Until 台帳.Cells(縦, 2) = ""

空白とは空白文字すらも入っていない状態のことです。

投稿2020/02/11 01:45

iruyas

総合スコア1067

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

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

MasaDiego

2020/02/11 02:47

iruyas様 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問