二つ条件で最終行の判定なんですが、A列が空白と同じ行でC列からW列まですべて空白なら、この行は最終行と判定する。
IF then の判断文を使って、andをたくさんを使うではなく、簡単に書けます?
質問の意味がわかりません
VBのバージョンは?
A列とか出てますがEXCELか何か読んでるんですか?
菜菜さんはどんな風に考えているのですか?
ぶぶ さん
説明してなかった、ごめんなさい。
VBAでEXCELのシートの最終行を探してます。
例えば、60行目A列のデータがなく、60行のC列からAW列までの範囲内データがないと、この60行目は最終行と判断します。
IF then の判断文を使って、andをたくさんを使うではなく、簡単に書けます?
簡単にというか同じ処理を繰り返すなら普通は Loop を使いますが?
調べる範囲が決まってるなら For To 〜 Next でしょうか。
a列のデータの有無チェックの後 C列からAW列までを
for 〜next でまわしてチェックします
あまりにたくさん有る時はANDは使いません。
特攻隊長まるるうさん:
だめでした(TT)
iRow = 60
Do
If .Cells(iRow, 4) <> "" Then
iRow = iRow + 1
Else
For Col = 10 To 36
If Cells(iRow, Col) <> "" Then iRow = iRow + 1
Else
Exit Do
Next
だめなのは特攻隊長まるるうさんの考え方じゃなくて
あなたのコーディング方法でしょ。
とりあえずエラー無しに動くとこまで持っていって下さい
考え方の話はその後で。
質問『サッカー上手くなりたいです。どうしたらいいですか?』
回答『リフティング練習して下さい。』
質問『できませんでした。』
…では話にならないでしょ?基本的なことはできるまで自分で練習して下さい。
初心者だと技術的に自力で解決するのが難しい…と判断できるような事は
力も貸しますが、『プログラミング入門』とかいう本に必ず書いてあるような
基本的なことにまでレスは付けませんよ。本を買うなり、セミナー受けるなり
して自分で勉強してきて下さい。
どこでどんな風になってだめでしたか?
デバッグで追いかけてみて、項目の中の値に何が入っているのか
変数の内容は自分が思っているような内容になっているのか
確認してみてください。
文法でエラーだったらヘルプみたりしてみて下さい。
私は苦しんだ分自分の身につくと思っています。
自分で調べた分ね
簡単に人に聞いて分かった分はすぐに忘れてしまいます。
がんばってくださいね(^-^)/
特攻隊長まるるうさん:
できました。技術的に自力で解決するまでにはかなり時間かかりますが、今一人で頑張ってますから、早いうちにできるようになっていきます。
考え方を教えてくれてありがとうございます。今現場で一人で仕事しているから、一つ小さいエラーがあっても凄く緊張で頭が混乱しています。簡単に人に聞いて助けるだけと思っていたので、すみませんでした。
ぶぶさん:
ご親切にありがとうございます。
ぶぶさん言った通り、苦しんだ分自分の身につくと信じています。
頑張ります。
iRow = 60
Do
If .Cells(iRow, 4) <> "" Then
iRow = iRow + 1
Else
For Col = 10 To 36
If .Cells(iRow, Col) <> "" Then GoTo pass
Next
Exit Do
pass:
iRow = iRow + 1
End If
Loop
iMaxRow = iRow - 1
プログラマーの中には『Goto』を見ると其のまま卒倒する人もいます。
『On Error GoTo』や深いネストから一気に抜け出すような特殊なケースを
除いては、GoToは使わない方がいいかも、代わりにフラグと条件分岐を使いましょう。
又数字に直接意味を持たせることも、マジックナンバーと言って、後々コードが
読みにくくなりますので嫌われます、Constを使いましょう。
試してないけど、だいたいこんな感じで。。。。
Option Explicit
Const MaxRow = 60
Const CheckCol = 4
Const StartCol = 10
Const EndCol = 36
Dim iRow As Integer
Dim Col As Integer
Dim Flg As Boolean
Dim iMaxRow As Integer
iRow = MaxRow
Do
Flg = False
If .Cells(iRow, CheckCol) = "" Then
For Col = StartCol To EndCol
If .Cells(iRow, Col) <> "" Then
Flg = True: iRow = iRow + 1
Exit For
End If
Next
Else
Flg = True: iRow = iRow + 1
End If
Loop While (Flg)
iMaxRow = iRow - 1
…ちなみに参考リンク
>プログラマーの中には『Goto』を見ると其のまま卒倒する人もいます。
過去ログ検索『Goto』で引っ掛かる↓
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200402/04020059.txt
皆さん貴重な意見ありがとうございます。m(__)m
ねろさん:
ありがとうございます。
GOTOをやめました。これから、もっともっと頑張ります。
特攻隊長まるるうさん:
私の質問をみると卒倒するよね、ごめんなさいm(__)m
特攻隊長まるるうさんが卒倒しないように必死頑張る(^^;)
ツイート | ![]() |