Excel VBA質問箱 IV

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

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


10635 / 13646 ツリー ←次へ | 前へ→

【20573】データのカウントについて さゆりン 04/12/12(日) 16:01 質問[未読]
【20574】Re:データのカウントについて かみちゃん 04/12/12(日) 16:11 発言[未読]
【20578】Re:データのカウントについて さゆりン 04/12/12(日) 17:26 質問[未読]
【20581】Re:データのカウントについて かみちゃん 04/12/12(日) 18:34 回答[未読]
【20582】Re:データのカウントについて さゆりン 04/12/12(日) 19:31 お礼[未読]
【20594】Re:データのカウントについて さゆりン 04/12/13(月) 1:54 質問[未読]
【20595】Re:データのカウントについて wizik 04/12/13(月) 4:26 発言[未読]
【20642】Re:データのカウントについて [名前なし] 04/12/13(月) 21:47 発言[未読]
【20645】Re:データのカウントについて さゆりン 04/12/14(火) 0:05 質問[未読]
【20647】Re:データのカウントについて [名前なし] 04/12/14(火) 0:28 発言[未読]
【20649】Re:データのカウントについて さゆりン 04/12/14(火) 0:56 質問[未読]
【20652】Re:データのカウントについて かみちゃん 04/12/14(火) 7:25 回答[未読]
【20684】Re:データのカウントについて さゆりン 04/12/15(水) 1:08 お礼[未読]
【20700】Re:データのカウントについて [名前なし] 04/12/15(水) 21:39 発言[未読]
【20708】Re:データのカウントについて さゆりン 04/12/16(木) 1:44 お礼[未読]

【20573】データのカウントについて
質問  さゆりン  - 04/12/12(日) 16:01 -

引用なし
パスワード
   こんにちは。はじめまして。助けてください。

 列  A B C D E F G H I ........
行 1  1 1 2 3 OK OK 5
  2  1 2 1 1 OK OK 4
  3  2 1 2 2 OK  6
  4  1 1 2  OK OK 3
  5  2 2 1 4 OK  4
  6  1 1 3  Ok Ok 6
  7
  8
  9
  :
  :

のようになっているとき

列ごとに1が何個あって2が何個あって3が何個あってとそれぞれマクロでカウントし、Sheet3に結果を貼り付けたいのですが、どうしたらよいでしょうか?ちなみにどこまでデータがあるか決まっていません。10行目のときもあれば100行目のときもあります。
OKとある列はOKが何個あるかカウントしたいです。

【20574】Re:データのカウントについて
発言  かみちゃん  - 04/12/12(日) 16:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>列ごとに1が何個あって2が何個あって3が何個あってとそれぞれマクロでカウントし、Sheet3に結果を貼り付けたいのですが、どうしたらよいでしょうか?

ズバリな回答ではないですが、以下のURLは参考になりませんか?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=20452;id=excel

【20578】Re:データのカウントについて
質問  さゆりン  - 04/12/12(日) 17:26 -

引用なし
パスワード
   >>列ごとに1が何個あって2が何個あって3が何個あってとそれぞれマクロでカウントし、Sheet3に結果を貼り付けたいのですが、どうしたらよいでしょうか?
>
>ズバリな回答ではないですが、以下のURLは参考になりませんか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=20452;id=excel

URLのものとほぼ同じ質問なのですが他の列も同時に処理したいのです。
でもわかりません。。。
同時処理するにはどうしたらよいのでしょうか?

【20581】Re:データのカウントについて
回答  かみちゃん  - 04/12/12(日) 18:34 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>列ごとに1が何個あって2が何個あって3が何個あってとそれぞれマクロでカウントし、Sheet3に結果を貼り付けたいのですが、どうしたらよいでしょうか?

さきほどご提示したURLとは、まったく違う方法です。
セルの値を1つずつループして検査しますので、処理速度は保証できません。

Option Explicit

Sub Macro1()
 Dim flg As Integer
 Dim c As Range, c2 As Range
 
 flg = 0
 
 '結果出力シートを全消去する
 Sheets("Sheet3").Cells.ClearContents
 
 'Sheet1のA1から空白行空白列で囲まれたセル範囲すべてを検査する。
 For Each c In Sheets("Sheet1").Range("A1").CurrentRegion
  'セルの値が空白のときは、カウントしない
  If c.Value <> "" Then
   With Sheets("Sheet3").Columns("A")
    Set c2 = .Find(c.Value, LookIn:=xlValues)
    If Not c2 Is Nothing Then
     c2.Offset(0, 1).Value = c2.Offset(0, 1).Value + 1
    Else
     With .Range("A65536").End(xlUp)
      .Offset(1 * flg, 0).Value = c.Value
      .Offset(1 * flg, 1).Value = 1
     End With
     flg = 1
    End If
   End With
  End If
 Next
End Sub

【20582】Re:データのカウントについて
お礼  さゆりン  - 04/12/12(日) 19:31 -

引用なし
パスワード
   かみちゃんへ

ありがとうございました。

【20594】Re:データのカウントについて
質問  さゆりン  - 04/12/13(月) 1:54 -

引用なし
パスワード
   こんにちは。助けてください。
いろいろな意見をお聞きしたいので多くの方から意見をいただきたいです。
以下の質問よろしくお願いします。
>
> 列  A B C D E F G H I ........
>行 1  1 1 2 3 OK OK 5
>  2  1 2 1 1 OK OK 4
>  3  2 1 2 2 OK  6
>  4  1 1 2  OK OK 3
>  5  2 2 1 4 OK  4
>  6  1 1 3  Ok Ok 6
>  7
>  8
>  9
>  :
>  :
>
>のようになっているとき
>
>列ごとに1が何個あって2が何個あって3が何個あってとそれぞれマクロでカウントし、Sheet3に結果を貼り付けたいのですが、どうしたらよいでしょうか?ちなみにどこまでデータがあるか決まっていません。10行目のときもあれば100行目のときもあります。
>OKとある列はOKが何個あるかカウントしたいのですが。

【20595】Re:データのカウントについて
発言  wizik  - 04/12/13(月) 4:26 -

引用なし
パスワード
   ▼さゆりン さん:
>こんにちは。助けてください。
>いろいろな意見をお聞きしたいので多くの方から意見をいただきたいです。
私は試していませんが、かみちゃんさんの書かれている方法ではダメでしたか?
もしダメだったんなら、ここがダメって言えばいいと思うし(まず自分で直そうとするべきですが)
うまくいったならそれでいいのではないでしょうか。

【20642】Re:データのカウントについて
発言  [名前なし]  - 04/12/13(月) 21:47 -

引用なし
パスワード
   ▼さゆりン さん:
ちなみにお聞きしますが、例として出された
>> 列  A B C D E F G H I ........
>>行 1  1 1 2 3 OK OK 5
>>  2  1 2 1 1 OK OK 4
>>  3  2 1 2 2 OK  6
>>  4  1 1 2  OK OK 3
>>  5  2 2 1 4 OK  4
>>  6  1 1 3  Ok Ok 6
>>  7
>>  8
>>  9
>>  :
>>  :
のデータの場合、Sheet3に貼り付ける結果というのはどのように
表示されればいいのですか?

【20645】Re:データのカウントについて
質問  さゆりン  - 04/12/14(火) 0:05 -

引用なし
パスワード
   ▼[名前なし] さん

>例として出したものに対してのデータの場合、Sheet3に貼り付ける結果というのはどのように表示されればいいのですか?

>>> 列  A B C D E F G H I ........
   1 N1 N2 N3 N4 N5 N6
>>>行 2  1 1 2 3 OK OK 5
>>>  3  1 2 1 1 OK OK 4
>>>  4  2 1 2 2 OK  6
>>>  5  1 1 2  OK OK 3
>>>  6  2 2 1 4 OK  4
>>>  7  1 1 3  Ok Ok 6
>>>  8
>>>  9
>>>  :
>>>  :

Sheet3の結果

 列  A B C D E F G H I ........
行 1  N1  
  2  1 4
  3  2 2 
  4  N2
  5  1 4 
  6  2 2 
  7  N3
  8  1 2
  9  2 3
  :  3 1

上のように1行目のN1をA列に。その下、A列にデータの数字。B列にカウントした数。
その繰り返しをしたかったのです。

【20647】Re:データのカウントについて
発言  [名前なし]  - 04/12/14(火) 0:28 -

引用なし
パスワード
   ▼さゆりン さん:
>>>> 列  A B C D E F G H I ........
>   1 N1 N2 N3 N4 N5 N6
>>>>行 2  1 1 2 3 OK OK 5
>>>>  3  1 2 1 1 OK OK 4
>>>>  4  2 1 2 2 OK  6
>>>>  5  1 1 2  OK OK 3
>>>>  6  2 2 1 4 OK  4
>>>>  7  1 1 3  Ok Ok 6
>>>>  8
>>>>  9
>>>>  :
>>>>  :
えーと、データの状態が最初と変わってますけど・・・。

>Sheet3の結果
>
> 列  A B C D E F G H I ........
>行 1  N1  
>  2  1 4
>  3  2 2 
>  4  N2
>  5  1 4 
>  6  2 2 
>  7  N3
>  8  1 2
>  9  2 3
>  :  3 1
>
>上のように1行目のN1をA列に。その下、A列にデータの数字。B列にカウントした数。
>その繰り返しをしたかったのです。
こういうことは、聞かれてから答えるのではなく、予め提示しておくべきです。
「教えてもらったマクロがこうなっていない」というのは、他の人に意見を求める
理由にはなりませんよ。

ちなみにE列とG列の結果についてはどうなりますか?省略されてるので
わからないのですけど。

【20649】Re:データのカウントについて
質問  さゆりン  - 04/12/14(火) 0:56 -

引用なし
パスワード
   ▼[名前なし] さん:
>データの状態が最初と変わってますけど・・・。
すいません。書き忘れました。
おっしゃる通りです。反省します。

>>Sheet3の結果
>>
>> 列  A B C D E F G H I ........
>>行 1  N1  
>>  2  1 4
>>  3  2 2 
>>  4  N2
>>  5  1 4 
>>  6  2 2 
>>  7  N3
>>  8  1 2
>>  9  2 3
>>  :  3 1
>>
>ちなみにE列とG列の結果についてはどうなりますか?省略されてるので
>わからないのですけど。
OKはCOUNTAで処理することにしました。

【20652】Re:データのカウントについて
回答  かみちゃん  - 04/12/14(火) 7:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>データの状態が最初と変わってますけど・・・。
>すいません。書き忘れました。
>おっしゃる通りです。反省します。

ここに回答しようとしている人の気持ちも考えてください。
私の場合は、自分の勉強のためにもあるのですが、それなりに労力と時間をかけています。
それを「忘れていた」で片付けられたのでは、たまったものではないです。

と、小言は、これくらいにして、「訂正後!」の要件であれば、やはり最初に提示したURLのコードをアレンジして作ってみました。
完璧に要件にはまっているわけではないですが、ある程度できるはずです。(もちろん、動作確認すみです。)

Option Explicit

Sub MyCount2()
 Dim Sn As String
 Dim ColumnNo As Integer, MaxColumnNo As Integer
 Dim CountRange As Range

 Sn = ActiveSheet.Name & "!"
 Rows(1).Insert xlShiftDown
 MaxColumnNo = Range("A2").CurrentRegion.Columns.Count
 With Sheets("Sheet3")
  For ColumnNo = 1 To MaxColumnNo
   Cells(1, ColumnNo).Value = "Data_Count"
   Range(Cells(1, ColumnNo), Cells(65536, ColumnNo).End(xlUp)) _
    .AdvancedFilter xlFilterCopy, , .Range("A65536").End(xlUp).Offset(1, 0), True
   Set CountRange = .Range("B65536").End(xlUp)
   With .Range(CountRange.Offset(1, 0), .Range("A65536").End(xlUp).Offset(, 1))
    .Formula = "=COUNTIF(" & Sn & Columns(ColumnNo).Address & "," & CountRange.Offset(1, -1).Address(RowAbsolute:=False) & ")"
'    .Value = .Value
   End With
  Next
  Rows(1).Delete xlShiftUp
  .Activate
  Rows(1).Delete xlShiftUp
 End With
 With Range("A1").CurrentRegion
  .AutoFilter Field:=1, Criteria1:="Data_Count"
  .SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp
  .AutoFilter Field:=1
  .AutoFilter
 End With
 Range("A1").Select
End Sub

あえて、説明はしません。
ヘルプなり、過去ログなり、検索してわからないところは調べてください。
そうすると、回答しようとしている人たちがどれくらい苦労しているかの気持ちがわかると思います。

かなり厳しいことを言いましたが、さゆりンさんのためです。
そして、回答しているのは、私の勉強のためです。

これに懲りずに、また質問してください。
そのときは、要件(「私はこのようにしたい!」)というのを忘れずにしっかりと書きましょう!

【20684】Re:データのカウントについて
お礼  さゆりン  - 04/12/15(水) 1:08 -

引用なし
パスワード
   ▼かみちゃんさんへ
こんばんは。さゆりンです。
すみません。遅くなりました。

>ここに回答しようとしている人の気持ちも考えてください。
>私の場合は、自分の勉強のためにもあるのですが、それなりに労力と時間をかけています。

かみちゃんさんのおっしゃる通りです。私は大変失礼でした。ごめんなさい。
それにもかかわらず回答していただいてとても感謝しております。少しアレンジして使わせていただきます。これからは自分で考えてみようと思います。
ありがとうございました。

名前なしさんもありがとうございました。

【20700】Re:データのカウントについて
発言  [名前なし]  - 04/12/15(水) 21:39 -

引用なし
パスワード
   >名前なしさんもありがとうございました。
まだなんの役にも立ってなかったんですが・・・。
なんか申し訳ないんで、下のコードを提供させていただきます。
結局どんな処理がわからないのかわからなかったんで、既に解決済みの
内容なのであればごめんなさい。

Private Sub 指定列の各数値の数を取得(ByVal 列番号 As Variant)
Dim 数値の総数 As Long
Dim 数値 As Long
Dim A1形式列標記 As Variant
Dim 結果表示 As String

  If Application.IsText(列番号) Then
   列番号 = Range(列番号 & "1").Column
  End If
  A1形式列標記 = Split(Cells(1, 列番号).Address(True, False), "$")
  MsgBox 列番号 & "列目(" & A1形式列標記(0) & "列)の数値を数えます。"
  結果表示 = Cells(1, 列番号).Value & vbCrLf
  For 数値 = Application.Min(Columns(列番号)) To Application.Max(Columns(列番号))
    数値の総数 = Application.CountIf(Columns(列番号), 数値)
    If 数値の総数 > 0 Then
      結果表示 = 結果表示 & 数値 & "は" & 数値の総数 & "個あります。" & vbCrLf
    End If
  Next 数値
  
  MsgBox 結果表示
End Sub

Sub 使い方()
 'どちらの指定の仕方でも可
 Call 指定列の各数値の数を取得(7) '7番目の列(G列)
 Call 指定列の各数値の数を取得("G") 'G列
End Sub

【20708】Re:データのカウントについて
お礼  さゆりン  - 04/12/16(木) 1:44 -

引用なし
パスワード
   ▼[名前なし] さん。こんばんは。

>まだなんの役にも立ってなかったんですが・・・。
[名前なし] さんは私の役に立ってくれました。私が失礼だったこと、質問内容が足りなかったことがよくわかりましたから。
それに[名前なし] さんが発言してくれたおかげで私の質問は回答を得ることが出来ました。かみちゃんさんに感謝してます。

>なんか申し訳ないんで、下のコードを提供させていただきます。
>結局どんな処理がわからないのかわからなかったんで、既に解決済みの
>内容なのであればごめんなさい。
コードの提供ありがとうございます。解決はしていますがこのコードでまた勉強したいと思います。

また質問すると思いますがそのときはよろしくお願いします。

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