[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「:」(コロン)の数をカウント』(無印)
以下のコードで「,」の個数がカウントできますが、
「:」(コロン)の数はカウントできません。
どうすればカウントできますか ?
Sub Sample3()
Dim buf As String, n As Long, cnt As Long
buf = "ABC,DEF,GHI"
Do
n = InStr(n + 1, buf, ",")
If n = 0 Then
Exit Do
Else
cnt = cnt + 1
End If
Loop
MsgBox cnt & "個あります"
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
ここが何をしているかは理解しているだろうか? >n = InStr(n + 1, buf, ",")
(ねむねむ) 2021/11/25(木) 09:58
ここのそのままか。 どこから持ってきたかは明記した方がいいと思うが。 http://officetanaka.net/excel/vba/tips/tips152.htm (ねむねむ) 2021/11/25(木) 10:09
>n = InStr(n + 1, buf, ",")
カンマがbufの中の何番目にあるかをカウントしているですよね。
カンマは、bufの中の4番目と8番目の2回ある
単純に「,」を「:」に置き換えると
n=0 でゼロ個と表示される
(無印) 2021/11/25(木) 10:12
>「:」(コロン)の数はカウントできません。
一応できたけどね。
Sub Sample3()
Dim buf As String, n As Long, cnt As Long
buf = "::ABC:DEF:GHI::"
Do
n = InStr(n + 1, buf, ":")
If n = 0 Then
Exit Do
Else
cnt = cnt + 1
End If
Loop
MsgBox cnt & "個あります"
End Sub
(一応) 2021/11/25(木) 10:13
>n = InStr(n + 1, buf, ",")
↑
ここを書き換えるのを忘れたってオチ?
ギャグですか?
(一応) 2021/11/25(木) 10:19
全角・半角が違っているとかは無いだろうか? (ねむねむ) 2021/11/25(木) 10:20
For I = 2 to 500
Do
n = InStr(n + 1, Cells(I, "A"), ":")
If n = 0 Then
MsgBox "[:]がありません。"
End
Else
cnt = cnt + 1
End If
Loop
Cells(I, "B").Value = cnt
Next
(無印) 2021/11/25(木) 10:28
これだと:が含まれていないセルで処理を終わってしまってそれより下のセルは調べないがそれでよいのだろうか? (ねむねむ) 2021/11/25(木) 10:47
For I = 2 to 500
Do
n = InStr(n + 1, Cells(I, "A"), ":")
If n = 0 Then
MsgBox "[:]がありません。" '←最後の「:」を見つけた後に必ずここを経由します。
End
Else
cnt = cnt + 1
End If
Loop
Cells(I, "B").Value = cnt
Next
上記コードでは、もし「:」があっても必ず"[:]がありません。"のメッセージを発します。
また、cntのリセットをしていないので行を経るごとにcntの値が増えていきます。
(きまぐれおじさん) 2021/11/25(木) 10:50
全角、半角対応です
Sub Test()
Dim i As Long, n As Long
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
n = UBound(Split(StrConv(Cells(i, "A").Value, vbNarrow), ":"))
If n <= 0 Then
Cells(i, "B").Value = "[:]がありません。"
Else
Cells(i, "B").Value = n
End If
Next
End Sub
(ピンク) 2021/11/25(木) 10:52
For i = 2 To 500
cnt = 0 '←cntをリセット
Do
n = InStr(n + 1, Cells(i, "A"), ":")
If n = 0 Then
Exit Do
Else
cnt = cnt + 1
End If
Loop
If cnt < 1 Then
MsgBox "[:]がありません。" '←cntが1未満のときにメッセージを発出します。
End
Else
Cells(i, "B").Value = cnt
End If
Next
無印さんのコードをベースに改修を加える案です。
(きまぐれおじさん) 2021/11/25(木) 10:55
まえの私の書き込みは間違い。 一つ目のセルで処理を終わってしまう。 >If n = 0 Then はあくまでも検索が終わったかの判断で検索文字がなかったかどうだかはcntで判断しないとならない。 (ねむねむ) 2021/11/25(木) 10:56
>実際のコードは、以下です
また、はじめはでたらめな適当コードですか…。 こんなのが多いな。 実は・・・・・・。 回答者をあきれさせる言葉。 (一応) 2021/11/25(木) 11:03
適当コード大歓迎ですよ。
実際のコードを見せてもらえないのが一番困ります。
(きまぐれおじさん) 2021/11/25(木) 11:07
かまいません。
無い場合は、A列のDATAに不備があるので
DATAに問題が無いか?のチェックを兼ねています。
ピンクさん、ありがとうございます。
全角、半角対応のコードで上手く数値がでました。
きまぐれおじさん、ありがとうございます。
コードを下記のようにして試してみました。
数値は、カウントされて表示されました。
Sub コロンの数を数える2()
Dim i As Long, cnt As Long, n As Long
For i = 2 To 500
cnt = 0 '←cntをリセット
Do
n = InStr(n + 1, Cells(i, "A"), ":")
If n = 0 Then
Exit Do
Else
cnt = cnt + 1
End If
Loop
If cnt < 1 Then
MsgBox "[:]がありません。" '←cntが1未満のときにメッセージを発出します。
End
Else
Cells(i, "B").Value = cnt
End If
Next
End Sub
(無印) 2021/11/25(木) 11:15
解決後ですが、こんな書き方も。
Sub test()
Dim i As Long, cnt As Long
For i = 2 To 500 ' ここは手抜き
cnt = countColon(Cells(i, "A").Text)
If cnt = 0 Then
Cells(i, "B").Value = "[:]がありません。"
Else
Cells(i, "B").Value = cnt
End If
Next
End Sub
Function countColon(s As String) As Long
s = StrConv(s, vbNarrow)
countColon = Len(s) - Len(Replace(s, ":", ""))
End Function
(γ) 2021/11/25(木) 13:43
Function countColon(s As String) As Long
countColon = UBound(Split(s, ":", -1, vbTextCompare))
End Function
(hatena) 2021/11/25(木) 15:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.