Excel VBA質問箱 IV

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

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


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

【32678】Countifについて【至急】 an 05/12/20(火) 18:39 質問[未読]
【32679】Re:Countifについて【至急】 やっちん 05/12/20(火) 18:55 発言[未読]
【32681】Re:Countifについて【至急】 an 05/12/20(火) 19:11 質問[未読]
【32683】Re:Countifについて【至急】 やっちん 05/12/20(火) 19:26 回答[未読]
【32684】Re:Countifについて【至急】 an 05/12/20(火) 19:32 質問[未読]
【32686】Re:Countifについて【至急】 やっちん 05/12/20(火) 19:42 回答[未読]
【32688】Re:Countifについて【至急】 an 05/12/20(火) 20:07 お礼[未読]
【32699】Re:Countifについて【至急】 ゆと 05/12/21(水) 0:43 発言[未読]
【32709】Re:Countifについて【至急】 an 05/12/21(水) 9:05 質問[未読]
【32776】Re:Countifについて【至急】 ゆと 05/12/21(水) 23:26 回答[未読]
【32786】Re:Countifについて【至急】 an 05/12/22(木) 10:37 お礼[未読]
【32680】Re:Countifについて【至急】 やっちん 05/12/20(火) 19:08 発言[未読]

【32678】Countifについて【至急】
質問  an  - 05/12/20(火) 18:39 -

引用なし
パスワード
   大変困っています。
どなたか教えてください。
以下のコード(下手で恥ずかしいですが、、)を2回実行しないと
正確にカウントされません。
原因がなんとなくわかるのですが、いくら考えても
修正することが出来ないのです。
お分かりになる方、至急アドバイスいただけると助かります。

-----------------------------------------------------------ここから
kizami = InputBox("刻みを入力して下さい。")
  lastrowno = Range("A65536").End(xlUp).Row
  
    If kizami = 500 Then
     
     For i = 2 To lastrowno
     
    
      Result1 = Application.WorksheetFunction.VLookup(Cells(i, 8),             Sheets("Sheet2").Columns("B"), 1, True)
      
       Range("L" & i).Value = Result1
       Range("M" & i).Value = "〜" & Sheets(2).Cells(i + 1, 2).Value
       Range("N" & i).Value = Application.WorksheetFunction.CountIf        (Sheets("200511").Columns("L"), Sheets("Sheet2").Cells(i,           2))
      
      Next i
      
    ElseIf kizami = 1000 Then
     
     For i = 2 To lastrowno
    
      Result2 = Application.WorksheetFunction.VLookup(Cells(i, 8),             Sheets("Sheet2").Columns("A"), 1, True)
      
       Range("L" & i).Value = Result2
       Range("M" & i).Value = "〜" & Sheets(2).Cells(i + 1, 1).Value
       Range("N" & i).Value = Application.WorksheetFunction.CountIf        (Sheets("200511").Columns("L"), Sheets("Sheet2").Cells(i,           1))
      Next i


    Else: kizami = 2000
     
     For i = 2 To lastrowno
    
      Result3 = Application.WorksheetFunction.VLookup(Cells(i, 8),       Sheets("Sheet2").Columns("C"), 1, True)      
       Range("L" & i).Value = Result3
       Range("M" & i).Value = "〜" & Sheets(2).Cells(i + 1, 3).Value
       Range("N" & i).Value = Application.WorksheetFunction.CountIf      (Sheets("200511").Columns("L"), Sheets("Sheet2").Cells(i, 3))
      
      Next i    
    
  End If

--------------------------------------------------------------ここまで
  

【32679】Re:Countifについて【至急】
発言  やっちん  - 05/12/20(火) 18:55 -

引用なし
パスワード
   ▼an さん:
>原因がなんとなくわかるのですが
それは何ですか?

【32680】Re:Countifについて【至急】
発言  やっちん  - 05/12/20(火) 19:08 -

引用なし
パスワード
   ▼an さん:
実行中にアクティブなシートは
Sheet2 でも
200511 でもないんですよね?

【32681】Re:Countifについて【至急】
質問  an  - 05/12/20(火) 19:11 -

引用なし
パスワード
   ▼やっちん さん:
>▼an さん:
>>原因がなんとなくわかるのですが
>それは何ですか?

繰り返し処理をしていますが、Countifの範囲をL列にしている
からかと思います。
下2行の値を確定してからCountifの入っている3行目を
実行すれば出来るのではないかと、、

Range("L" & i).Value = Result1
Range("M" & i).Value = "〜" & Sheets(2).Cells(i + 1, 2).Value
Range("N" & i).Value = Application.WorksheetFunction.CountIf        (Sheets("200511").Columns("L"), Sheets("Sheet2").Cells(i,           2))

アクティブシートは"200511"です。

宜しくお願いいたします。

【32683】Re:Countifについて【至急】
回答  やっちん  - 05/12/20(火) 19:26 -

引用なし
パスワード
   ▼an さん:
>繰り返し処理をしていますが、Countifの範囲をL列にしている
>からかと思います。
>下2行の値を確定してからCountifの入っている3行目を
>実行すれば出来るのではないかと、、
>アクティブシートは"200511"です。

anさんの思ってる通りですよ。ループが終わらないとL列は完成しませんから。
1回目は途中までのカウントしかセットされません。
2回目はL列が完成しているのでカウントが正しくなるんです。

【32684】Re:Countifについて【至急】
質問  an  - 05/12/20(火) 19:32 -

引用なし
パスワード
   ▼やっちん さん:
>▼an さん:
ありがとうございます。

一回の実行で結果を出すためには
どのようにコードを変えたらいいでしょうか?
何度か試していますが、思ったように動いてくれません。

同じコード(if、for文)を追加し、処理をCountifのみにしたら
大丈夫でしょうか?

本当に進歩がなくて、めげそうです。
宜しくお願いいたします。

【32686】Re:Countifについて【至急】
回答  やっちん  - 05/12/20(火) 19:42 -

引用なし
パスワード
   3箇所にN列のを設定する箇所(カウントしている所)がありますよね。
今のループの中から出して
その下にN列だけを設定するループを作るといいです。
これが一番簡単でしょう。

下のように3つとも変更してみてください。
FOR i = 2 To lastrowno
  Result1 =〜
  Range("L" & i).Value = 〜
  Range("M" & i).Value = 〜
Next i
FOR i = 2 To lastrowno
  Range("N" & i).Value =〜
Next i

【32688】Re:Countifについて【至急】
お礼  an  - 05/12/20(火) 20:07 -

引用なし
パスワード
   ▼やっちん さん:

出来ました!!!
本当に本当にありがとうございます!!

感謝の言葉も見つからないくらいです!!

今後とも宜しくお願いいたします!!

【32699】Re:Countifについて【至急】
発言  ゆと  - 05/12/21(水) 0:43 -

引用なし
パスワード
   すでに解決済みみたいですが、提示された例題でしたら

Range("L2:L" & lastrowno) = Result1

としてFor文の前に記述しても大丈夫です。

【32709】Re:Countifについて【至急】
質問  an  - 05/12/21(水) 9:05 -

引用なし
パスワード
   ▼ゆと さん:
ありがとうございます!
後ほどじっくり試したいと思います。

別質問ですが、データをクリアするときに
グラフも削除したいのですが、
グラフのみ削除できません。
ご存知でしたら教えていただけると助かります。

【32776】Re:Countifについて【至急】
回答  ゆと  - 05/12/21(水) 23:26 -

引用なし
パスワード
   an さん
質問の内容が変る際には別スレッドとして投稿なさることを
お勧めします。(そうでないと回答が付き難いです)
また、HP内で検索ボタンを利用することで色々自分の知りたい
ことと同じ様な質問を見つけることができるので活用が後々
ご自分の為になるかと思います。
(今回の例だと「グラフ 削除」とキーワードに入力して検索
すると関連のある記事を探せたりします。[#29731] )
人に聞くよりも早い場合もあるでしょうし。

一応種別を回答とさせていただきましたので、コードも記載して
みます。

Sub test
  Dim MyChart As Object, TargetSh As Worksheet
  Set TargetSh = ActiveSheet
  For Each MyChart In TargetSh.ChartObjects
   MyChart.Delete
  Next
End Sub

【32786】Re:Countifについて【至急】
お礼  an  - 05/12/22(木) 10:37 -

引用なし
パスワード
   ▼ゆと さん:

おっしゃるとおりです。
あせっていて、掲示板の常識を忘れていました。
大変申し訳ありませんでした。
今後気をつけたいと思います。

コード有難うございました。
参考にさせて頂きます。

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