二つ条件で最終行の判定について

解決


菜菜  2005-05-27 00:22:51  No: 121973

二つ条件で最終行の判定なんですが、A列が空白と同じ行でC列からW列まですべて空白なら、この行は最終行と判定する。
IF  then    の判断文を使って、andをたくさんを使うではなく、簡単に書けます?


ぶぶ  2005-05-27 00:33:20  No: 121974

質問の意味がわかりません
VBのバージョンは?
A列とか出てますがEXCELか何か読んでるんですか?
菜菜さんはどんな風に考えているのですか?


菜菜  2005-05-27 00:40:54  No: 121975

ぶぶ さん
説明してなかった、ごめんなさい。
VBAでEXCELのシートの最終行を探してます。
例えば、60行目A列のデータがなく、60行のC列からAW列までの範囲内データがないと、この60行目は最終行と判断します。
IF  then    の判断文を使って、andをたくさんを使うではなく、簡単に書けます?


特攻隊長まるるう  2005-05-27 00:50:26  No: 121976

簡単にというか同じ処理を繰り返すなら普通は Loop を使いますが?
調べる範囲が決まってるなら For To 〜 Next でしょうか。


ぶぶ  2005-05-27 00:58:55  No: 121977

a列のデータの有無チェックの後 C列からAW列までを
for 〜next でまわしてチェックします
あまりにたくさん有る時はANDは使いません。


菜菜  2005-05-27 01:13:43  No: 121978

特攻隊長まるるうさん: 
だめでした(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


さい  2005-05-27 01:40:02  No: 121979

だめなのは特攻隊長まるるうさんの考え方じゃなくて
あなたのコーディング方法でしょ。

とりあえずエラー無しに動くとこまで持っていって下さい
考え方の話はその後で。


特攻隊長まるるう  2005-05-27 01:41:09  No: 121980

質問『サッカー上手くなりたいです。どうしたらいいですか?』
回答『リフティング練習して下さい。』
質問『できませんでした。』
…では話にならないでしょ?基本的なことはできるまで自分で練習して下さい。
初心者だと技術的に自力で解決するのが難しい…と判断できるような事は
力も貸しますが、『プログラミング入門』とかいう本に必ず書いてあるような
基本的なことにまでレスは付けませんよ。本を買うなり、セミナー受けるなり
して自分で勉強してきて下さい。


ぶぶ  2005-05-27 02:04:33  No: 121981

どこでどんな風になってだめでしたか?
デバッグで追いかけてみて、項目の中の値に何が入っているのか
変数の内容は自分が思っているような内容になっているのか
確認してみてください。
文法でエラーだったらヘルプみたりしてみて下さい。
私は苦しんだ分自分の身につくと思っています。
自分で調べた分ね
簡単に人に聞いて分かった分はすぐに忘れてしまいます。
がんばってくださいね(^-^)/


菜菜  2005-05-27 02:14:37  No: 121982

特攻隊長まるるうさん:
   できました。技術的に自力で解決するまでにはかなり時間かかりますが、今一人で頑張ってますから、早いうちにできるようになっていきます。
考え方を教えてくれてありがとうございます。今現場で一人で仕事しているから、一つ小さいエラーがあっても凄く緊張で頭が混乱しています。簡単に人に聞いて助けるだけと思っていたので、すみませんでした。

ぶぶさん:
ご親切にありがとうございます。
ぶぶさん言った通り、苦しんだ分自分の身につくと信じています。
頑張ります。   
        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


ねろ  2005-05-27 18:19:38  No: 121983

プログラマーの中には『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


特攻隊長まるるう  2005-05-27 19:06:00  No: 121984

…ちなみに参考リンク
>プログラマーの中には『Goto』を見ると其のまま卒倒する人もいます。
過去ログ検索『Goto』で引っ掛かる↓
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200402/04020059.txt


菜菜  2005-05-27 20:31:03  No: 121985

皆さん貴重な意見ありがとうございます。m(__)m
ねろさん:
ありがとうございます。
GOTOをやめました。これから、もっともっと頑張ります。
特攻隊長まるるうさん:
私の質問をみると卒倒するよね、ごめんなさいm(__)m
特攻隊長まるるうさんが卒倒しないように必死頑張る(^^;)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加