- ベストアンサー
文字の個数
Excel2013 指定した文字の個数を求めたい。 例えば、 A1からJ1に入力された"a"の数をK1に表示。 続いてA2からJ2に入力された"b"の数をK2に表示。 関数ではなくて、VBでコードを書きたいのですが、どなたがVBに詳しい方教えて下さい。よろしくお願いします。
- akiyes
- お礼率64% (22/34)
- Visual Basic
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> =COUNTIF(A1:J1,"a")となるのでしょうか。 その場合、abcは個数に入りませんがそういう仕様ですか? > 行は10行くらで、 > 列は10列くらいなので、J1としました。 1行目にはaで2行目にはbで3行目以降は不明ですが、それともすべての行でaとbの個数を合算した結果をそれぞれK列L列にに出すのでしょうか。どちらにしても、回答されたコードをご自身で解析してご自身の仕様に合うように改良する必要がありますが、不明な部分が多いので、とりあえず それぞれの行でaの個数はK列にbの個数はL列に表示するということとして3種類の例を示します。 Sub Example1() 'a及びbの文字総数を求める Dim c As Range Dim i As Integer, j As Integer Dim samplestr(2) As String Range("K:L").ClearContents samplestr(0) = "a" samplestr(1) = "b" For i = 1 To 10 For Each c In Range(Cells(i, "A"), Cells(i, "J")) Cells(i, "K").Value = Cells(i, "K").Value + (Len(c.Value) - Len(Replace(c.Value, samplestr(0), ""))) / Len(samplestr(0)) Cells(i, "L").Value = Cells(i, "L").Value + (Len(c.Value) - Len(Replace(c.Value, samplestr(1), ""))) / Len(samplestr(1)) Next Next End Sub Sub Example2() '文字列にa及びbを含む文字列の個数を求める Dim c As Range Dim i As Integer, j As Integer Dim samplestr(2) As String Range("K:L").ClearContents samplestr(0) = "a" samplestr(1) = "b" For i = 1 To 10 For Each c In Range(Cells(i, "A"), Cells(i, "J")) If InStr(1, c.Value, samplestr(0)) > 0 Then Cells(i, "K").Value = Cells(i, "K").Value + 1 End If If InStr(1, c.Value, samplestr(1)) > 0 Then Cells(i, "L").Value = Cells(i, "L").Value + 1 End If Next Next End Sub Sub Example3() 'COUNTIFと同じ結果 Dim c As Range Dim i As Integer, j As Integer Dim samplestr(2) As String Range("K:L").ClearContents samplestr(0) = "a" samplestr(1) = "b" For i = 1 To 10 For Each c In Range(Cells(i, "A"), Cells(i, "J")) If c.Value = samplestr(0) Then Cells(i, "K").Value = Cells(i, "K").Value + 1 End If If c.Value = samplestr(1) Then Cells(i, "L").Value = Cells(i, "L").Value + 1 End If Next Next End Sub
その他の回答 (3)
- hallo-2007
- ベストアンサー率41% (888/2115)
一応関数案ですが K列に =SUM(LEN(A1:J1)-LEN(SUBSTITUTE(A1:J1,"a",""))) と入れて Ctrl+Shift+Enter で決定して配列関数にする L列も同様 =SUM(LEN(A1:D1)-LEN(SUBSTITUTE(A1:D1,"b",""))) で 下へコピーではだめですか?
お礼
hallo-2007さん、ありがとうございます。 今後のVBの応用にと思ってますので、すいませんが今回はVBで解決したいです。
- nishi6
- ベストアンサー率67% (869/1280)
>例えば、 >A1からJ1に入力された"a"の数をK1に表示。 >続いてA2からJ2に入力された"b"の数をK2に表示。 この例が意味深で、行が進むにつれて逐次、a、b、c・・・と変化する? "a"の値はいいとして、"z"の次は? "aa"を数えることはある? そのとき、"aaaa"の中に"aa"は何個と定義する。などの疑問がありますが、"aaaa"には"aa"が2個と定義して、いずれの場合にも対応できるようにユーザー定義関数を作りました。 =CountCharacter("a",A1:J1) =CountCharacter("b",A2:J2) のように使います。 標準モジュールに貼り付け Function CountCharacter(c As String, SearchRng As Range) Dim rg As Range '検査するセル Dim num As Integer '見つけた個数 For Each rg In SearchRng num = num + (Len(rg.Text) _ - Len(Application.Substitute(rg.Text, c, ""))) / Len(c) Next CountCharacter = num End Function
お礼
早速、ありがとうございます。 まだ試してないのですが、私の質問が不十分ですいませんでした。 行は10行くらで、 列は10列くらいなので、J1としました。 関数だとK1に =COUNTIF(A1:J1,"a")となるのでしょうか。 それをタテ10行、横10列でVBならと思いやってみたんですが、私には難しく質問させて頂きました。 "a"は実際は日本語で簡単な略語なんですが、aとさせて頂きました。 あと、質問の記述に誤りがありました。 K列にaの数 L列にbの数 を求める場合の質問でした。 申し訳ありませんでした。 職場で使う書類を作り替える為にVB勉強中です。 どうか、ご教授お願いします。
- kkkkkm
- ベストアンサー率65% (1620/2459)
たとえば以下のような感じでいかがでしょう。 Sub Example() Dim c As Range Dim i As Integer, j As Integer Range("K:K").ClearContents For i = 0 To 1 For Each c In Range(Cells(i + 1, "A"), Cells(i + 1, "J")) Cells(i + 1, "K").Value = Cells(i + 1, "K").Value + (Len(c.Value) - Len(Replace(c.Value, Chr(Asc("a") + i), ""))) Next Next End Sub
お礼
kkkkkmさん早速、ありがとうございます。 まだ試してないのですが、私の質問が不十分ですいませんでした。 行は10行くらで、 列は10列くらいなので、J1としました。 関数だとK1に =COUNTIF(A1:J1,"a")となるのでしょうか。 それをタテ10行、横10列でVBならと思いやってみたんですが、私には難しく質問させて頂きました。 "a"は実際は日本語で簡単な略語なんですが、aとさせて頂きました。 あと、質問の記述に誤りがありました。 K列にaの数 L列にbの数 を求める場合の質問でした。 申し訳ありませんでした。 職場で使う書類を作り替える為にVB勉強中です。 どうか、ご教授お願いします。
関連するQ&A
- 指定文字の同じ行2列、3列目の文字入力の個数
B列3~12行に文字が入力されており指定文字Bの行の2列目に文字が入力されていればその個数をC14にまた3列目に文字入力個数5個をD14に入力したいのですがどなたか関数が解る方宜しくお願いします。Excel2013です。
- ベストアンサー
- Windows 7
- セル内にある文字の個数を知りたい
エクセル2002を使用してますが、セル内にある文字の個数を知りたいとき、どのような関数を使えばいいのでしょうか? たとえば、A1に「ABCAABACABAC」 という文字列があった場合、Aの個数を知りたいのです。 このとき結果をB1で表示させるにはどうすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 列にセル値と同じ文字があればその行の個数を返す
セルM5に=IF(L5="","",SUMPRODUCT(($A$5:$A$11=L5)*MONTH($B$5:$E$11)=M$3)))を入力した結果指定範囲の個数2を示しM11まで順に12月のセル数を返しますが、N5セルに 同じようにIF(L5="","",SUMPRODUCT(($F$5:$F$11=L5)*MONTH($G$5:$J$11)=N$3)))を入力した場合なぜか1月の範囲内個数2ではなく空白を含めた全セル数4を返し以降も同じよう返します。他の月では問題ないのですが1月だけなぜか指定月の個数が帰りませんどなたか関数の解る方宜しくお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセルでINDEX+MATCH関数について
INDEX+MATCH関数について B1:D7、F1:H7には次のようなデータが入力されていて J1:M3のようなものを作成したいのですが上手くいきません。 J2にコード番号を入力し、品名を表示させ、数を入力し、価格を表示させる ・・・ということをしたいのですが、上手くいきません。 K2には =INDEX((C2:D7,G2:H7),MATCH(J2,B2:B7,0),1,LEFT(J2,1)) という関数が入っていて K2にはりんご M2には500 と表示され上手くいきます。 コード番号100番台は上手くいくのですが、200番台になると#N/Aとエラー表記になります。 どこをどう修正すれば上手くいくのでしょうか。 教えてください。
- ベストアンサー
- オフィス系ソフト
- 入力されているセルの個数を数えるには?
エクセル2003で表を作成しました。指定した文字を含むセル以外で、入力されているセルの個数を数えるにはどの関数を使えばいいでしょうか? A B C D E F G 1 アい 2 3 フて イろ 4 5 エじ 「ア」を含むセル以外で、文字が入力されているセルの個数は?
- ベストアンサー
- オフィス系ソフト
- セル内の同一文字の個数を測定
セル内にある同一文字の個数を測定したいのですが 有効な関数はないでしょうか? たとえば・・・ A1セル内に”あいうあいうあい”となっていた場合、 ”あ”の数(結果=3)を出力したいのですが、 どういった関数を使えばよいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 同列に文字入力があるまで隣列の個数を合計
excelシートに以下のような表があり別表に下記項目に基づき合計値を入力したい。 1. I3セルにD列項目「あ」のうちB列記号「A+B+C」のF列個数合計を入力 2. J3セルにはD列項目「あ」のうちB列記号「D」のF列個数合計を入力 3. I4セルにD列項目「い」のうちB列記号「A+B+C」のF列個数合計を入力 4. J4セルにはD列項目「い」のうちB列記号「D+E」のF列個数合計を入力 以下続くのですが関数もしくはVBAコードが解る方宜しくお願いします。
- 締切済み
- Visual Basic
- 行の指定文字と同じ列にある指定数値合致で合計個数
2行目のD列●印の列にある3行目指定数値が1の場合1個とし2行目の●印すべての同列にある3行目の指定数値が1の合計個数2をセルK3に入力したい。4~5行目も同じようにK4~K6に入力したいのですが関数の解る方宜しくお願いします。環境はExcel2013です。
- ベストアンサー
- Excel(エクセル)
- 列に指定文字が合えば合計値を入力
Excel2013使用で簡略に作成したのですが集計表の文字Aの1、セルC15にリスト表Aの○合計個数2を入力したい、集計表文字A、B、Cそれぞれの行にリスト表○文字合計数を入力したいのですがセルに入れる関数をお解りの方宜しくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
お礼
kkkkkmさん、ありがとうございます。 帰宅したら早速試してみます。