Excel VBA質問箱 IV

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

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


3523 / 13645 ツリー ←次へ | 前へ→

【61593】種類別にカウントする 経理担当 09/5/21(木) 14:50 質問[未読]
【61597】Re:種類別にカウントする neptune 09/5/21(木) 15:14 発言[未読]
【61606】Re:種類別にカウントする 経理担当 09/5/21(木) 17:19 質問[未読]
【61617】Re:種類別にカウントする neptune 09/5/21(木) 23:05 発言[未読]
【61620】Re:種類別にカウントする Yuki 09/5/22(金) 8:51 発言[未読]
【61621】Re:種類別にカウントする 経理担当 09/5/22(金) 11:16 質問[未読]
【61623】Re:種類別にカウントする Yuki 09/5/22(金) 11:46 発言[未読]
【61630】Re:種類別にカウントする 経理担当 09/5/22(金) 13:11 質問[未読]
【61632】Re:種類別にカウントする Yuki 09/5/22(金) 14:15 発言[未読]
【61634】Re:種類別にカウントする 経理担当 09/5/22(金) 16:51 質問[未読]
【61636】Re:種類別にカウントする HAM 09/5/22(金) 17:58 発言[未読]
【61637】Re:種類別にカウントする もも 09/5/22(金) 18:17 発言[未読]
【61645】Re:種類別にカウントする Yuki 09/5/23(土) 8:12 発言[未読]
【61656】Re:種類別にカウントする 経理担当 09/5/25(月) 13:23 質問[未読]
【61658】Re:種類別にカウントする Yuki 09/5/25(月) 13:46 発言[未読]
【61660】Re:種類別にカウントする 経理担当 09/5/25(月) 15:03 質問[未読]

【61593】種類別にカウントする
質問  経理担当  - 09/5/21(木) 14:50 -

引用なし
パスワード
   以前、この種の質問があった様な気がしますが、改めて質問いたします。

ユーザーフォームを使用したツールを作成しております。
流れは
アクセス→情報を取得します。
ここでシートAに情報を持ってきます。
次に県別の検索をして検索結果をシートBにコピーします。
ここで質問なのですが、
シートのH列に県名がランダムに入っております。
栃木が2つ入っていれば
栃木  2件

その結果をラベルに表示したいと思っています。
栃木 ○○件  と言った具合にちなみに

栃木 ○○件
千葉 ○○件
神奈川 ○○件
東京 ○○件
で県名はラベルで表示させます。
残りの○○件の○○の数をカウントして表示させたいと考えております。
よろしくお願いします。

【61597】Re:種類別にカウントする
発言  neptune  - 09/5/21(木) 15:14 -

引用なし
パスワード
   ▼経理担当 さん:
こんにちは

>残りの○○件の○○の数をカウントして表示させたいと考えております。
>よろしくお願いします。
で、なにがわからないのでしょう?

カウントするだけなら、
・全部総当り
・countif
・find
・match
・その他、Accessからデータを持ってくる際に必要なクエリを作っておくとか
等が浮かびますが。

【61606】Re:種類別にカウントする
質問  経理担当  - 09/5/21(木) 17:19 -

引用なし
パスワード
   ▼neptune さん:
返事ありがとうございます。
簡単でいいのですがどのような構文を書けばよろしいでしょうか?
よろしくお願いします。

説明不足ですいません。

G H I・・・・・・
  千葉
  千葉
  栃木
  東京
   ・
   ・
の時に
千葉:2
栃木:1
東京:1
埼玉:0
群馬:0
の様に表示させたいのですが

よろしくお願いいたします。


>▼経理担当 さん:
>こんにちは
>
>>残りの○○件の○○の数をカウントして表示させたいと考えております。
>>よろしくお願いします。
>で、なにがわからないのでしょう?
>
>カウントするだけなら、
>・全部総当り
>・countif
>・find
>・match
>・その他、Accessからデータを持ってくる際に必要なクエリを作っておくとか
>等が浮かびますが。

【61617】Re:種類別にカウントする
発言  neptune  - 09/5/21(木) 23:05 -

引用なし
パスワード
   ▼経理担当 さん:

>簡単でいいのですがどのような構文を書けばよろしいでしょうか?
相変わらず何が判らないのか判りません。
やりたい事の概要を書いただけでは質問になっていないです。

例:CountIfの場合構文は以下。

arg1,arg2は引数

Dim lcount As Long
  lcount = Application.WorksheetFunction.CountIf(arg1, arg2)

【61620】Re:種類別にカウントする
発言  Yuki  - 09/5/22(金) 8:51 -

引用なし
パスワード
   ▼経理担当 さん:
>
>G H I・・・・・・
>  千葉
>  千葉
>  栃木
>  東京
>   ・
>   ・
>の時に
>千葉:2
>栃木:1
>東京:1
>埼玉:0
>群馬:0
>の様に表示させたいのですが

の時に出現回数0の埼玉、群馬はどこから出てくるのでしょうか?

【61621】Re:種類別にカウントする
質問  経理担当  - 09/5/22(金) 11:16 -

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

上手く説明できなくすませんです。

(ワークシート上の列)G H I・・・・・・
         千葉
         千葉
         栃木
         東京
         ・
         ・
H列に関東の各県がランダムに入っております。
このときに
千葉:2
栃木:1
東京:1
埼玉:0
群馬:0
と表示させようと考えております。
上記の県名は最初から表示した状態で件数(数字)のみラベルに表示したいと
考えております。上記の様に埼玉、群馬がH列に入っていなければ件数は0
逆に千葉が2件入っていれば2と表示させたいのですが?
上手く説明できなくてすいません。
よろしくお願いします。


>▼経理担当 さん:
>>
>>G H I・・・・・・
>>  千葉
>>  千葉
>>  栃木
>>  東京
>>   ・
>>   ・
>>の時に
>>千葉:2
>>栃木:1
>>東京:1
>>埼玉:0
>>群馬:0
>>の様に表示させたいのですが
>
>の時に出現回数0の埼玉、群馬はどこから出てくるのでしょうか?

【61623】Re:種類別にカウントする
発言  Yuki  - 09/5/22(金) 11:46 -

引用なし
パスワード
   ▼経理担当 さん:
>千葉:2
>栃木:1
>東京:1
>埼玉:0
>群馬:0
>と表示させようと考えております。
>上記の県名は最初から表示した状態で件数(数字)のみラベルに表示したいと
この表示がA列のとき
B列に=COUNTIF(H:H,A1)と入れ下にコピーで出来上がり

【61630】Re:種類別にカウントする
質問  経理担当  - 09/5/22(金) 13:11 -

引用なし
パスワード
   ▼Yuki さん:
説明不足ですいません。
今回はユーザーフォームでツールを作成しています。
アクセスDB〜ツールでデータを読込みます。
この時、ワークシートAにデータを引張ってきます。
と同時にリストBOXに表示させています。
更に検索(日付検索等)してワークシートBにコピーして
検索後のデータを同リストBOXに表示させます。
この時にユーザーフォーム上のラベルに先ほどの件数を
表示したいと考えています。
この場合の構文を具体的にどのように書けばよいでしょうか?
情けないことにCOUNTIFというのは使った事が無いものですいません。
よろしくお願いします。


>▼経理担当 さん:
>>千葉:2
>>栃木:1
>>東京:1
>>埼玉:0
>>群馬:0
>>と表示させようと考えております。
>>上記の県名は最初から表示した状態で件数(数字)のみラベルに表示したいと
>この表示がA列のとき
>B列に=COUNTIF(H:H,A1)と入れ下にコピーで出来上がり

【61632】Re:種類別にカウントする
発言  Yuki  - 09/5/22(金) 14:15 -

引用なし
パスワード
   ▼経理担当 さん:

>更に検索(日付検索等)してワークシートBにコピーして
>検索後のデータを同リストBOXに表示させます。

(ワークシート上の列)G H I・・・・・・
         千葉
         千葉
         栃木
         東京
はワークシートBのH列に表示されているのですよね。

前回の質問の
千葉
東京
栃木
最初から表示してある県名はフォーム上なのか -> だったらフォームの何処に?
シートなのか -> だったらどのシートのなに列に?
結果はラベルとしてありますが、最初から表示した県名との同期は?

【61634】Re:種類別にカウントする
質問  経理担当  - 09/5/22(金) 16:51 -

引用なし
パスワード
   ▼Yuki さん:
下手な質問で何回もすいませんです。
県名はユーザーフォーム上に(ラベルとして)配置してます。
件数は県名の隣にラベルで表示を考えております。
県名との同期はありません。
県名の隣のラベル番号を指定して表示させたいのですが・・
よろしくお願いします。


>▼経理担当 さん:
>
>>更に検索(日付検索等)してワークシートBにコピーして
>>検索後のデータを同リストBOXに表示させます。
>
>(ワークシート上の列)G H I・・・・・・
>         千葉
>         千葉
>         栃木
>         東京
>はワークシートBのH列に表示されているのですよね。
>
>前回の質問の
>千葉
>東京
>栃木
>最初から表示してある県名はフォーム上なのか -> だったらフォームの何処に?
>シートなのか -> だったらどのシートのなに列に?
>結果はラベルとしてありますが、最初から表示した県名との同期は?

【61636】Re:種類別にカウントする
発言  HAM  - 09/5/22(金) 17:58 -

引用なし
パスワード
   ▼経理担当 さん:
▼Yuki さん:
横合いから失礼いたします。
useform1に
CommandButtonを1個
Labelを10個配置しました
Label1〜5に県名をきさいしました
Label6〜10は0を記入してます

下記のコードを書きました
ニュアンス的にはこのような感じなのでしょうか

Private Sub CommandButton1_Click()
Dim i, intLoop As Integer
For i = 6 To 10
  Controls("Label" & i) = 0
Next i
intLoop = 1
Do While Cells(intLoop, "H") <> ""
  intLoop = intLoop + 1
  If Cells(intLoop, "H") = Label1 Then Label6 = Label6 + 1
  If Cells(intLoop, "H") = Label2 Then Label7 = Label7 + 1
  If Cells(intLoop, "H") = Label3 Then Label8 = Label8 + 1
  If Cells(intLoop, "H") = Label4 Then Label9 = Label9 + 1
  If Cells(intLoop, "H") = Label5 Then Label10 = Label10 + 1
Loop
End Sub

【61637】Re:種類別にカウントする
発言  もも  - 09/5/22(金) 18:17 -

引用なし
パスワード
   ▼経理担当 さん:
▼Yuki さん:
▼HAM さん:
私も横から失礼いたします。

単にこんな事で済むのではないですか?

Sub test()
Dim varKEN As Variant
Dim strKENSU(4) As String
Dim strBuf As String

varKEN = Array("千葉", "栃木", "東京", "埼玉", "群馬")
 
For i = 0 To 4
 strKENSU(i) = varKEN(i) & ":" & _
   WorksheetFunction.CountIf(Sheets("Sheet1").Columns("H"), varKEN(i))
Next

MsgBox Join(strKENSU, vbCr)

End Sub

【61645】Re:種類別にカウントする
発言  Yuki  - 09/5/23(土) 8:12 -

引用なし
パスワード
   ▼経理担当 さん:
>▼Yuki さん:
>県名はユーザーフォーム上に(ラベルとして)配置してます。
>件数は県名の隣にラベルで表示を考えております。

では県名のラベルのコントロール名は
Label1 〜 Label10
それで件数のラベルのコントロール名は
Label11 〜 Label20
とします。
コマンドボタンで処理します。

Private Sub CommandButton1_Click()
  Dim Dic As Object
  Dim v1 As Variant
  Dim v2 As Variant
  Dim i  As Long
  
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To 10
    Dic(Me.Controls("Label" & i).Caption) = 0
  Next
  ' シート名は環境に合わせて変更
  With Worksheets("Sheet2")
    ' 集計用のデータ
    v2 = .Range("H1", "H" & .Range("H" & Rows.Count).End(xlUp).Row).Value
  End With
  ' データ加算
  For i = 1 To UBound(v2)
    ' 同一ITEMに追加
    If Dic.Exists(v2(i, 1)) Then
      Dic(v2(i, 1)) = Dic(v2(i, 1)) + 1
    End If
  Next
  v2 = Dic.Items
  
  For i = LBound(v2) To UBound(v2)
    ' ラベルに表示
    Me.Controls("Label" & i + 11).Caption = vbTab & v2(i)
  Next
End Sub

【61656】Re:種類別にカウントする
質問  経理担当  - 09/5/25(月) 13:23 -

引用なし
パスワード
   ▼Yuki さん:HAM、ももさんありがとうございます。
コマンドボタンを使用しないとやはりダメでしょうか・・?
アクセスDBからデータをひっぱて来てまずワークシートAに貼り付けます。
その後、検索(日付検索等)して、その結果をワークシートBに貼り付けます。
この時に同時にカウント(集計)したいと思ってます。
もうちょっと整理しますと・・
千葉(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
栃木(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
群馬(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
東京(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
 ・         ・
 ・         ・
 ・         ・
の様に表示したいと考えてます。
ちなみに日付検索の構文は次の通りです。
この構文に組み込むことは可能でしょうか?
Private Sub CommandButton44_Click()
   
Dim myRow As Long
   With Application.WorksheetFunction
     If .CountIf(Worksheets("WA").Range("A2:K2500"), Me.TextBox48.Text) > 0 Then
    
    
       With Worksheets("WA")
       Intersect(.UsedRange, .Columns("A:AY")).ClearContents
       End With
       Worksheets("WA").Range("A1").AutoFilter _
         Field:=3, _
         Criteria1:=">=" & Me.TextBox48.Text, _
         Operator:=xlAnd, _
         Criteria2:="<=" & Me.TextBox48.Text
       Worksheets("WA").Range("A1").CurrentRegion.Copy Destination:=Worksheets("WB").Range("A1")
'       myRow = Worksheets("WB").Range("A1").CurrentRegion.Rows.Count
'       Me.ListBox1.RowSource = "TEMP!A2:J100" & myRow
       Worksheets("WB").Range("A1").AutoFilter
     Else
       Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理
     End If
   End With
  
  
With Worksheets("WB")
 IRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
End With

With ListBox1
.ColumnHeads = True
.ColumnCount = 8
.ColumnWidths = "30;80;55;60;60;60;65;45;"
'.Text = "DATA!A2:K2500"
.RowSource = "WAREA!A2:H2500"

End With

End Sub

よろしくお願いいたします。


>▼経理担当 さん:
>>▼Yuki さん:
>>県名はユーザーフォーム上に(ラベルとして)配置してます。
>>件数は県名の隣にラベルで表示を考えております。
>
>では県名のラベルのコントロール名は
>Label1 〜 Label10
>それで件数のラベルのコントロール名は
>Label11 〜 Label20
>とします。
>コマンドボタンで処理します。
>
>Private Sub CommandButton1_Click()
>  Dim Dic As Object
>  Dim v1 As Variant
>  Dim v2 As Variant
>  Dim i  As Long
>  
>  Set Dic = CreateObject("Scripting.Dictionary")
>  For i = 1 To 10
>    Dic(Me.Controls("Label" & i).Caption) = 0
>  Next
>  ' シート名は環境に合わせて変更
>  With Worksheets("Sheet2")
>    ' 集計用のデータ
>    v2 = .Range("H1", "H" & .Range("H" & Rows.Count).End(xlUp).Row).Value
>  End With
>  ' データ加算
>  For i = 1 To UBound(v2)
>    ' 同一ITEMに追加
>    If Dic.Exists(v2(i, 1)) Then
>      Dic(v2(i, 1)) = Dic(v2(i, 1)) + 1
>    End If
>  Next
>  v2 = Dic.Items
>  
>  For i = LBound(v2) To UBound(v2)
>    ' ラベルに表示
>    Me.Controls("Label" & i + 11).Caption = vbTab & v2(i)
>  Next
>End Sub

【61658】Re:種類別にカウントする
発言  Yuki  - 09/5/25(月) 13:46 -

引用なし
パスワード
   ▼経理担当 さん:
>▼Yuki さん:HAM、ももさんありがとうございます。
>コマンドボタンを使用しないとやはりダメでしょうか・・?
>アクセスDBからデータをひっぱて来てまずワークシートAに貼り付けます。
>その後、検索(日付検索等)して、その結果をワークシートBに貼り付けます。
>この時に同時にカウント(集計)したいと思ってます。
>もうちょっと整理しますと・・
>千葉(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>栃木(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>群馬(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>東京(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>

>>Private Sub CommandButton1_Click()
の中のシート名をWBに変更して
 プロシージャ名を ↓ とでも変更して
>>Private Sub SetPrefCount()


>'.Text = "DATA!A2:K2500"
>.RowSource = "WAREA!A2:H2500"
>
>End With
>

 Call SetPrefCount ' 最後に追加でいいですよ。

> End Sub

【61660】Re:種類別にカウントする
質問  経理担当  - 09/5/25(月) 15:03 -

引用なし
パスワード
   ▼Yuki さん:
どうもありがとうございます。
少し整理したいと思いますのでお時間を下さい。
よろしくお願いします。


>▼経理担当 さん:
>>▼Yuki さん:HAM、ももさんありがとうございます。
>>コマンドボタンを使用しないとやはりダメでしょうか・・?
>>アクセスDBからデータをひっぱて来てまずワークシートAに貼り付けます。
>>その後、検索(日付検索等)して、その結果をワークシートBに貼り付けます。
>>この時に同時にカウント(集計)したいと思ってます。
>>もうちょっと整理しますと・・
>>千葉(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>>栃木(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>>群馬(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>>東京(ユーザーフォームに最初から表示) ○○(ラベルに数字を表示)
>>
>
>>>Private Sub CommandButton1_Click()
>の中のシート名をWBに変更して
> プロシージャ名を ↓ とでも変更して
>>>Private Sub SetPrefCount()
>
>
>>'.Text = "DATA!A2:K2500"
>>.RowSource = "WAREA!A2:H2500"
>>
>>End With
>>
>
> Call SetPrefCount ' 最後に追加でいいですよ。
>
>> End Sub

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