Excel VBA質問箱 IV

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

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


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

【58140】名前をカウントするには nao 08/10/6(月) 9:41 質問[未読]
【58141】Re:名前をカウントするには マクロマン 08/10/6(月) 10:22 発言[未読]
【58144】Re:名前をカウントするには nao 08/10/6(月) 12:40 発言[未読]
【58147】Re:名前をカウントするには neptune 08/10/6(月) 14:12 回答[未読]
【58154】Re:名前をカウントするには にぃ 08/10/6(月) 17:08 回答[未読]
【58155】Re:名前をカウントするには にぃ 08/10/6(月) 17:46 発言[未読]

【58140】名前をカウントするには
質問  nao  - 08/10/6(月) 9:41 -

引用なし
パスワード
   Aの列に人の名前をフルネームで入れており
日本人の名前は漢字、ひらがな、カタカナで記載されており
外人の名前はアルファベットで記載しています
また、苗字と名前の間には半角か全角のスペースが入っており
この状況で外人の名前のみ、と日本人の名前のみをカウントするにはどのようにしたらよろしいでしょうか

【58141】Re:名前をカウントするには
発言  マクロマン  - 08/10/6(月) 10:22 -

引用なし
パスワード
   名前の重複はありえますか?
ある場合は、カウントはどうしますか?

【58144】Re:名前をカウントするには
発言  nao  - 08/10/6(月) 12:40 -

引用なし
パスワード
   名前が重複する場合は
2回目以降に出てきた名前はカウントしない条件にしようと思います

【58147】Re:名前をカウントするには
回答  neptune  - 08/10/6(月) 14:12 -

引用なし
パスワード
   ▼nao さん:
>名前が重複する場合は
>2回目以降に出てきた名前はカウントしない条件にしようと思います

アルファベットが含まれているかどうかで悩んでいると見たので、
殆ど検証はしてませんが、簡単なのでセルにアルファベットが含まれているか
どうかを判断するちょっと関数作ってみました。

'使い方
Sub t()
  MsgBox FindAsc(Range("A2"))
End Sub

'セルにアルファベットが含まれているかどうかを判断する
'直接入力か、半角英字の場合のみに対応(と思う)
Public Function FindAsc2(pRng As Range) As Boolean
  Dim sFind As String
  sFind = pRng.Text
  If sFind Like "*[A-Z]*" Or sFind Like "*[a-z]*" Then
    FindAsc = True
  Else
    FindAsc = False
  End If
End Function

#もし使うのならLike 演算子のHelpを使用例も含め隅から隅まで読んで
 から使ってください。

【58154】Re:名前をカウントするには
回答  にぃ  - 08/10/6(月) 17:08 -

引用なし
パスワード
   ▼nao さん:
>名前が重複する場合は
>2回目以降に出てきた名前はカウントしない条件にしようと思います

はじめまして、こんにちは。

サンプルコードです。
たぶんこれで重複した場合でもできると思います^^;

Sub Sample()
  Dim Dic, Keys
  Dim i As Long
  Dim J, E As Integer 'Jが日本人、Eが外人です
  Dim buf As String
  
  '重複以外を取得します
  Set Dic = CreateObject("Scripting.Dictionary")
  
  For i = 1 To 100
  
    buf = Cells(i, 1).Value
    
    If Not Dic.Exists(buf) Then
      Dic.Add buf, buf
    End If
    
  Next i
  
  'Keysメソッドから名前を出せるので、日本語か英語か判断します
  Keys = Dic.Keys
  
  J = 0
  E = 0
  
  For i = 0 To Dic.Count - 1
  
    If Not Keys(i) = "" Then '空白のときは飛ばします
  
      If Asc(Keys(i)) < 0 Then
        J = J + 1
      Else
        E = E + 1
      End If
      
    End If
    
  Next i
  
  MsgBox "日本人の数は" & J & "人です"
  
  MsgBox "外人の数は" & E & "人です"
  
  Set Dic = Nothing
  
End Sub

途中、If Asc(Keys(i)) < 0 Then のコードで判断しているのですが
Asc("A1")の機能で、()内の頭の文字コードを返しています。

「日本語」ならマイナスの特定の数字を返し、「英語」ならプラスの特定の
数字を返すらしいです。
ちなみに「数字」だとプラスの数字を返しますので、指定内に「数字」が
入っていると外人の人数が増加してしまいます。

ここではサンプルとしてA1からA100までを取得していますので
お好みでセル位置を変えてください^^;

【58155】Re:名前をカウントするには
発言  にぃ  - 08/10/6(月) 17:46 -

引用なし
パスワード
   >ちなみに「数字」だとプラスの数字を返しますので、指定内に「数字」が
>入っていると外人の人数が増加してしまいます。

↑指定内に「数字」というか、頭が「数字」の場合ですね。
途中に数字が入っていたとしても問題はありません。

まぁ名前に数字が入ってる人がいるかはわからないですが
念のため^^;

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