Excel VBA質問箱 IV

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

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


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

【9534】列に現れる文字や数字の種類 ムーミン 03/12/8(月) 9:44 質問
【9535】Re:列に現れる文字や数字の種類 INA 03/12/8(月) 9:48 回答
【9539】Re:列に現れる文字や数字の種類 ムーミン 03/12/8(月) 9:55 発言
【9540】Re:列に現れる文字や数字の種類 INA 03/12/8(月) 10:08 回答
【9541】Re:列に現れる文字や数字の種類 ムーミン 03/12/8(月) 10:20 質問
【9551】Re:列に現れる文字や数字の種類 ichinose 03/12/8(月) 15:01 回答
【9552】Re:列に現れる文字や数字の種類 ムーミン 03/12/8(月) 15:06 お礼
【9553】Re:列に現れる文字や数字の種類 INA 03/12/8(月) 15:10 回答
【9554】Re:列に現れる文字や数字の種類 ムーミン 03/12/8(月) 15:14 お礼

【9534】列に現れる文字や数字の種類
質問  ムーミン E-MAIL  - 03/12/8(月) 9:44 -

引用なし
パスワード
   久しぶりに投稿いたします。どなたかHELPねがえませんでしょうか?
  A
1 1
2 1
3 3
4 6
5 6
6 3
7 1
8 3
9 3
10 6

A列にはデータが入っています。
求めたいのは、A列のデータの種類ごとの個数です。

1が3個、3が4個、6が3個が知りたいのです。
ただし、1,3,6は決まっていない(時には文字であったり、別の数字があったり)
ので都度種類を洗い出す必要があります。

どなたか宜しくお願い致します。

【9535】Re:列に現れる文字や数字の種類
回答  INA  - 03/12/8(月) 9:48 -

引用なし
パスワード
   1.A列をフィルタオプションの「重複無視」で抽出して、
その抽出されたリストを別シートにコピぺする。

2.コピぺされたリストを1件ずつオートフィルタして、
抽出された件数をカウントする。

フィルタ機能を使うので、1行目にタイトル行を設けることができれば、
この方法で出来ると思います。

【9539】Re:列に現れる文字や数字の種類
発言  ムーミン E-MAIL  - 03/12/8(月) 9:55 -

引用なし
パスワード
   ▼INA さん:
>1.A列をフィルタオプションの「重複無視」で抽出して、
>その抽出されたリストを別シートにコピぺする。
>
>2.コピぺされたリストを1件ずつオートフィルタして、
>抽出された件数をカウントする。
>
>フィルタ機能を使うので、1行目にタイトル行を設けることができれば、
>この方法で出来ると思います。

INAさん、早速ありがとうございました。
VBAマクロでご協力願えませんか?
サンプルは1種類なんですが、実は数種類の統計を取り、
月間のルーチンワークになりそうです。
また随時もありそうなんです。
宜しくお願いできませんでしょうか?

【9540】Re:列に現れる文字や数字の種類
回答  INA  - 03/12/8(月) 10:08 -

引用なし
パスワード
   マクロの自動記録くらいは、試されたのでしょうか?

【9541】Re:列に現れる文字や数字の種類
質問  ムーミン E-MAIL  - 03/12/8(月) 10:20 -

引用なし
パスワード
   ▼INA さん:
>マクロの自動記録くらいは、試されたのでしょうか?

はい!以下のマクロを作成しました。

Dim r As Long, maxr As Long, allsu As Long
Dim cellpos As String, setpos As Long, setpos3 As Long, setpos6 As Long

Range("a65536").End(xlUp).Select
cellpos = Selection.Address()
allsu = Range("a1:" & cellpos).Rows.Count

setpos = 0
setpos3 = 0
setpos6 = 0

For r = 1 To allsu

  If Range("a" & r).Value = "1" Then         '1の場合
    setpos = setpos + 1
      'MsgBox setpos
      ElseIf Range("a" & r).Value = "3" Then  '3の場合
            setpos3 = setpos3 + 1
      ElseIf Range("a" & r).Value = "6" Then  '6の場合
            setpos6 = setpos6 + 1
      
  End If
Next
Range("a" & allsu + 2).Value = 1
Range("b" & allsu + 2).Value = setpos
Range("a" & allsu + 3).Value = 3
Range("b" & allsu + 3).Value = setpos3
Range("a" & allsu + 4).Value = 6
Range("b" & allsu + 4).Value = setpos6
    
'
End Sub

しかしながら、1,3,6を固定値にしているのでいいのですが、
実際はデータ量も多いので都度調べながら固定値指定していては
汎用性がないので、その種類を一気に調べて何処かに持たせたい
のです。

宜しくお願い致します。

【9551】Re:列に現れる文字や数字の種類
回答  ichinose  - 03/12/8(月) 15:01 -

引用なし
パスワード
   ムーミン さん、INA さん、こんにちは。

色んな方法があると思いますが、ロジックとしては、

1 重複なしのリストを作成(例題の1,3,6を見つけ出す)
2 ↑リストに対して個数のカウント
ですよね?
'=========================================================
Sub main()
  Dim e_row As Long
  Dim idx As Long
  Dim jdx As Long
  Dim r_add As String
  jdx = 1
  e_row = Cells(Rows.Count, 1).End(xlUp).Row
  r_add = Range(Cells(1, 1), Cells(e_row, 1)).Address
  For idx = 1 To e_row
   With WorksheetFunction
     If .CountIf(Range("a1:a" & idx), Range("a" & idx)) = 1 Then
      Range("b" & jdx).Value = Range("a" & idx).Value
      Range("c" & jdx).Formula = _
          "=countif(" & r_add & "," & Range("a" & idx).Value _
          & ")"
      jdx = jdx + 1
      End If
     End With
   Next
End Sub

アクティブシートに対してのコードです。
確認してみて下さい。

【9552】Re:列に現れる文字や数字の種類
お礼  ムーミン E-MAIL  - 03/12/8(月) 15:06 -

引用なし
パスワード
   ▼ichinose さん:
>ムーミン さん、INA さん、こんにちは。
>
>色んな方法があると思いますが、ロジックとしては、
>
>1 重複なしのリストを作成(例題の1,3,6を見つけ出す)
>2 ↑リストに対して個数のカウント
>ですよね?
>'=========================================================
>Sub main()
>  Dim e_row As Long
>  Dim idx As Long
>  Dim jdx As Long
>  Dim r_add As String
>  jdx = 1
>  e_row = Cells(Rows.Count, 1).End(xlUp).Row
>  r_add = Range(Cells(1, 1), Cells(e_row, 1)).Address
>  For idx = 1 To e_row
>   With WorksheetFunction
>     If .CountIf(Range("a1:a" & idx), Range("a" & idx)) = 1 Then
>      Range("b" & jdx).Value = Range("a" & idx).Value
>      Range("c" & jdx).Formula = _
>          "=countif(" & r_add & "," & Range("a" & idx).Value _
>          & ")"
>      jdx = jdx + 1
>      End If
>     End With
>   Next
>End Sub
>
>アクティブシートに対してのコードです。
>確認してみて下さい。

INAさん、お忙しいところありがとうございました。
試してみます。

【9553】Re:列に現れる文字や数字の種類
回答  INA  - 03/12/8(月) 15:10 -

引用なし
パスワード
   http://excelfactory.cool.ne.jp/ExcelQA/excel.cgi?mode=all&namber=46035&rev=0

解決済みですね・・・

【9554】Re:列に現れる文字や数字の種類
お礼  ムーミン E-MAIL  - 03/12/8(月) 15:14 -

引用なし
パスワード
   ▼INA さん:
>http://excelfactory.cool.ne.jp/ExcelQA/excel.cgi?mode=all&namber=46035&rev=0
>
>解決済みですね・・・


INAさん、解決しました。
本当にありがとうございました。
お手数おかけ致しました。

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