[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「:」(コロン)の数をカウント』(無印)
以下のコードで「,」の個数がカウントできますが、
「:」(コロン)の数はカウントできません。
どうすればカウントできますか ?
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.