Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8822 / 13644 ツリー ←次へ | 前へ→

【30944】範囲指定etc お世話になります 05/11/7(月) 17:09 質問[未読]
【30948】Re:範囲指定etc ちくたく 05/11/7(月) 18:23 回答[未読]
【30952】Re:範囲指定etc HiroHiro 05/11/7(月) 21:32 回答[未読]
【30962】Re:範囲指定etc お世話になります 05/11/8(火) 9:22 質問[未読]
【30965】Re:範囲指定etc こたつねこ 05/11/8(火) 11:03 回答[未読]
【30968】Re:範囲指定etc お世話になります 05/11/8(火) 14:09 お礼[未読]

【30944】範囲指定etc
質問  お世話になります  - 05/11/7(月) 17:09 -

引用なし
パスワード
   初心者な為、質問させていただきます
下記のような表があったとします。
 
 A B C D E    F    G   H  
1        イベント手順  確認  
3        A     Z   △
4             Y   △          
5             X   ○
6             W   ○
7        B     V   △     
8             U   △

上記表のイベントAの確認○の行のみを削除したいのですが
どのように範囲指定をしたらいいのか初心者なため検討もつきません。
また、G3(E列に文字があった場合のG列)が○であった場合その行は消さずに
イベント列の値のみを残し空白にしたいと考えています。

このような場合の範囲指定・削除動作をするにはどうしたらよろしいでしょうか。
検討もつかない為、コード作成依頼となってしまうと思いますが
何卒、よろしくお願い申し上げます。

【30948】Re:範囲指定etc
回答  ちくたく  - 05/11/7(月) 18:23 -

引用なし
パスワード
   お世話になります 様
こんにちは。

>このような場合の範囲指定・削除動作をするにはどうしたらよろしいでしょうか。
>検討もつかない為、コード作成依頼となってしまうと思いますが
>何卒、よろしくお願い申し上げます。

どこが検討がつかないかわかりませんので、
ヒント的なコードを呈示します。
全くVBAがわからないのでしたら、
コードが欲しい目的を書いて頂けたら助かります。
保守が必要な目的の場合に、丸投げでコード書いちゃうと、
責任をとれませんので。

Sub test()

  Dim i As Integer
  Dim lastNum As Integer
  
  lastNum = InputBox("処理したい最終行を入力してください")
  
  For i = lastNum To 1 Step -1
    If Range("G" & i).Value = "○" Then
      'Rows(i).Hidden = True
      Rows(i).Delete
    End If
  Next i
  
End Sub

【30952】Re:範囲指定etc
回答  HiroHiro  - 05/11/7(月) 21:32 -

引用なし
パスワード
   ▼お世話になります さん:
意味を取り違えていればお許しください。
小生の理解はE列に文字があれば一列クリアさせ
G列に○があれば、一列削除と理解しました。
この理解の元で・・・原始的なコードかと思いますが

Sub クリアと削除() 
      
Dim i As Integer
Dim rst1 As Integer
rst1 = Cells(65536, 6).End(xlUp).Row '6列(F列)目で検索しています
For i = rst1 To 2 Step -1
If Cells(i, 6).Offset(, -1) <> "" Then  '5列(E列)目で文字があれば一列クリア
Rows(i).ClearContents
End If
Next

Dim j As Integer
Dim rst2 As Integer
rst2 = Cells(65536, 6).End(xlUp).Row
For j = rst2 To 2 Step -1
If Cells(j, 6).Offset(, 1) = "○" Then '7列(G列)目で「○」があれば一列削除
Rows(j).Delete
End If

Next
End Sub


>上記表のイベントAの確認○の行のみを削除したいのですが
>どのように範囲指定をしたらいいのか初心者なため検討もつきません。
>また、G3(E列に文字があった場合のG列)が○であった場合その行は消さずに
>イベント列の値のみを残し空白にしたいと考えています。
>
>このような場合の範囲指定・削除動作をするにはどうしたらよろしいでしょうか。
>検討もつかない為、コード作成依頼となってしまうと思いますが
>何卒、よろしくお願い申し上げます。

【30962】Re:範囲指定etc
質問  お世話になります  - 05/11/8(火) 9:22 -

引用なし
パスワード
   ちくたくさん、hirohiroさんご回答ありがとうございます。

私の説明不足でご迷惑をお掛けしました。
全くのVBA初心者な為、コードを戴けたらと思っております。


A B C D  E    F    G   H  
1        イベント手順  確認  
2        A     S   ○
3             Z   △
4             Y   △          
5             X   ○
6             W   ○
7        B     V   △     
8        C     U   △


動作目的は
イベント列(E列)に仮にA〜Zまでの値があったとして
その中からイベント列のAの値の行範囲(行2〜行6)のH列の値が
○だった場合に○の行(行2.行5.行6が該当)を削除をする。
ただし、E列の値がAになっている行(行2が該当)は行削除を行わず、
その行のE列(E2が該当)のAの値のみを残しクリアをする。

わからない点は、E列のAの範囲はファイルによって数が変わってくるため
その範囲指定の方法がわからないのと、E列がAの値でH列が○の行の場合、
E列のAの値のみを残し、残りはクリアする方法です。

上記のような動作をするコードを出来たら丸投げで戴けると助かります。

結果として、

A B C D  E    F    G   H  
1        イベント手順  確認  
2        A        
3             Z   △
4             Y   △          
5        B     V   △
6        C     U   △

上記のような表が出来上がると助かります。

お忙しいところ、大変申し訳ありません。
初心者な為、丸投げでのコード作成を依頼し余計にご迷惑をお掛けしています。
どうか、よろしくお願い致します。

【30965】Re:範囲指定etc
回答  こたつねこ  - 05/11/8(火) 11:03 -

引用なし
パスワード
   お世話になりますさん、こんにちは

Sub test()
  Dim lngRow As Long
  Dim i As Long
  
  With ActiveSheet
    'F列を必須入力として最終行取得
    lngRow = .Range("F65536").End(xlUp).Row
    
    'データが65536行まで入力してあった場合
    'もしくはデータが無い場合の処理
    If lngRow = 1 Then
      If .Range("F2").Value = "" Then
        Exit Sub
      Else
        lngRow = 65536
      End If
    End If
    
    '画面更新しない
    Application.ScreenUpdating = False
    
    For i = lngRow To 2 Step -1
      If .Range("E" & i).Value = "" Then
        'E列が未入力の場合
        'G列に○が入っている場合のみ行削除
        If .Range("G" & i).Value = "○" Then
          .Rows(i).Delete
        End If
      Else
        'E列が入力されている場合
        'G列に丸が入っている場合のみF&G列削除
        If .Range("G" & i).Value = "○" Then
          .Range("F" & i & ":G" & i).Delete Shift:=xlToLeft
          'もしくは
          '.Range("F" & i & ":G" & i).Value=""
        End If
      End If
    Next i
    
    '画面更新する
    Application.ScreenUpdating = True
  End With
End Sub

こんな感じでどうでしょう?

【30968】Re:範囲指定etc
お礼  お世話になります  - 05/11/8(火) 14:09 -

引用なし
パスワード
   こたつねこさま、ありがとうございます。
ほぼ理想のものが出来上がりましたので
あとは自分で少し訂正してみます。

本当に助かりました。
ありがとうございます。

ちくたくさま、HiroHiroさまもありがとうございました。

8822 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free