セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

演習問題テーマ:セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する

「、」で区切られたデータがひとつのセルに入っているとき、別表にその区切り文字の出現回数+1回だけデータ転記します。

この教材についての過去の質問・感想

12042 : 小川慶一の回答 (2020-05-06 16:27:42)

kanekoさん:

理解につながったようで良かったです (^^

> このパターンは基礎編では初めて出てきたように感じましたが勘違いでしょうか。

for next構文のカウンター変数の値を for ... next の間で一切利用しないケースははじめてかもしれませんね。

10:00ごろのコードは、もちろんそこだけ取り出せば、以下のように書くことも可能です。
for kaisu = 0 to 3
range("B" & kaisu + 2).value = range("A2").value
next

ですが、このようにfor next構文のカウンター値を転記先行指定に使ってしまうと、このループをさらに別のループの中に入れて処理しようとするときに不都合です。(12:00あたり)

そこで、転記先を指定する変数を別途用意しました。

転記先を指定する変数を用意するケースは、当初ご指摘の「フォローアップ ベーシック 【動画5】」等ででてきていますね。

ひきつづきよろしくお願いいたします。


> 丁寧な回答ありがとうございます。
>
> >for next構文のカウンター変数の値を for ... next の間で利用するも利用しないもプログラマーの自由です。(*)
> 「利用しない」パターンがあるということがわかりませんでした。
> 理解できました。
> ご提示いただいたコードを実行してより理解が深まりました。
>
> このパターンは基礎編では初めて出てきたように感じましたが勘違いでしょうか。
>
> ありがとうございました。


12041 : kanekoさんのコメント (2020-05-06 14:47:56)

丁寧な回答ありがとうございます。

>for next構文のカウンター変数の値を for ... next の間で利用するも利用しないもプログラマーの自由です。(*)
「利用しない」パターンがあるということがわかりませんでした。
理解できました。
ご提示いただいたコードを実行してより理解が深まりました。

このパターンは基礎編では初めて出てきたように感じましたが勘違いでしょうか。

ありがとうございました。


12037 : 小川慶一の回答 (2020-05-06 14:05:42)

kanekoさん:

お返事ありがとうございます。

依然としてご質問の趣旨がつかめませんが...。

for next構文は、くり返しの構文です。
for next構文のカウンター変数の値を for ... next の間で利用するも利用しないもプログラマーの自由です。(*)

以下のサンプルコードを、ひとつずつ、実際にステップイン実行してみてください。

Sub tukau_1()
    Dim moto
    For moto = 1 To 10
        Range("A1").Value = "使う" & moto
    Next
End Sub

Sub tukau_2()
    Dim moto
    For moto = 1 To 10
        Range("B" & moto).Value = "使う"
    Next
End Sub

Sub tukau_3()
    Dim moto
    For moto = 1 To 10
        Range("C" & moto).Value = "使う" & moto
    Next
End Sub

Sub tukawanai_1()
    Dim moto
    For moto = 1 To 10
        Range("D1").Value = "使わない"
    Next
End Sub

Sub tukawanai_2()
    Dim moto
    Dim saki
    saki = 1
    For moto = 1 To 10
        Range("E" & saki).Value = "使わない"
    Next
End Sub

Sub tukawanai_3()
    Dim moto
    Dim saki
    saki = 1
    For moto = 1 To 10
        Range("F" & saki).Value = "使わない"
        saki = saki + 1
    Next
End Sub

Sub tukawanai_4()
    Dim moto
    Dim saki
    saki = 1
    For moto = 1 To 10
        Range("G1").Value = "使わない" & saki
        saki = saki + 1
    Next
End Sub

Sub tukawanai_5()
    Dim moto
    Dim saki
    saki = 1
    For moto = 1 To 10
        Range("H" & saki).Value = "使わない" & saki
        saki = saki + 1
    Next
End Sub


サンプルコードに理解を超えるものがあればどのプロシージャか教えてください。

(*)で示した言葉とここで提示したサンプルコードで間接的に回答になっていますでしょうか。
もしまだお聞きになりたいことと回答内容に根本的な乖離があるようでしたらひきつづき質問してください。
よろしくお願いいたします。



> ご回答ありがとうございます。
> 示していただいた[a]→[b]、[c]→[d]の使用例は理解できています。
>
> お聞きしたいのは、今回の動画で使っていたfor kaisu 0 to 3 ~ nextの使い方についてです。
> [d]では変数「moto」を「2」から「11」の数をfor ~nextの間のコードに代入していますが、今回の動画で使った変数「kaisu」はどこにも代入されていません。
> 結果的には、for ~ nextの間のコードを指定した回数繰り返している様に見受けられます。
> ご回答の文にもありますが、二つの例は全く違う使い方だと思うのですが、代入ではなく、間のコードを繰り返すという機能があるという理解でよいのか聞きたいのです。


12036 : kanekoさんのコメント (2020-05-06 13:45:37)

ご回答ありがとうございます。
示していただいた[a]→[b]、[c]→[d]の使用例は理解できています。

お聞きしたいのは、今回の動画で使っていたfor kaisu 0 to 3 ~ nextの使い方についてです。
[d]では変数「moto」を「2」から「11」の数をfor ~nextの間のコードに代入していますが、今回の動画で使った変数「kaisu」はどこにも代入されていません。
結果的には、for ~ nextの間のコードを指定した回数繰り返している様に見受けられます。
ご回答の文にもありますが、二つの例は全く違う使い方だと思うのですが、代入ではなく、間のコードを繰り返すという機能があるという理解でよいのか聞きたいのです。


12031 : 小川慶一の回答 (2020-05-06 11:39:09)

kanekoさん:

ご質問の趣旨がわかりません。
質問文が理解不能なうえ、以下の2つのサンプルコードの内容が違いすぎるからです。(どこを比較したいのか分かりません)

>①今回の使用例
>②フォローアップ ベーシック 【動画5】


参考までにひとつだけ書くと、以下の[a]は[b]のように書けます。
[c]は[d]のように書けます。(基礎編講座本編第1章)
本動画では、[a], [c]のような書き方ではなく[b], [d]のような書き方を示してみました。

この解説でもしまだ疑問が残るようでしたら、以下の[a], [b], [c], [d] のコードを用いてさらに質問してください。

'[a]
Sub tenki_a()
    Worksheets("Sheet2").Range("B2").Value = Worksheets("Sheet1").Range("A2").Value
    Worksheets("Sheet2").Range("C2").Value = Worksheets("Sheet1").Range("B2").Value
    Worksheets("Sheet2").Range("D2").Value = Worksheets("Sheet1").Range("C2").Value
    Worksheets("Sheet2").Range("E2").Value = Worksheets("Sheet1").Range("D2").Value
    Worksheets("Sheet2").Range("F2").Value = Worksheets("Sheet1").Range("E2").Value
End Sub

'[b]
Sub tenki_b()
    Worksheets("Sheet2").Range("B2:F2").Value = Worksheets("Sheet1").Range("A2:E2").Value
End Sub

'[c]
Sub tenki_c()
    Dim moto
    For moto = 2 To 11
        Worksheets("Sheet2").Range("B" & moto).Value = Worksheets("Sheet1").Range("A" & moto).Value
        Worksheets("Sheet2").Range("C" & moto).Value = Worksheets("Sheet1").Range("B" & moto).Value
        Worksheets("Sheet2").Range("D" & moto).Value = Worksheets("Sheet1").Range("C" & moto).Value
        Worksheets("Sheet2").Range("E" & moto).Value = Worksheets("Sheet1").Range("D" & moto).Value
        Worksheets("Sheet2").Range("F" & moto).Value = Worksheets("Sheet1").Range("E" & moto).Value
    Next
End Sub

'[d]
Sub tenki_d()
    Dim moto
    For moto = 2 To 11
        Worksheets("Sheet2").Range("B" & moto & ":F" & moto).Value = Worksheets("Sheet1").Range("A" & moto & ":E" & moto).Value
    Next
End Sub




> 理解できない部分があり、フォローアップ ベーシックを読み返してもやはり分からなかったので質問です。
> 理解できなかったのは、マサラさんが質問した内容と同じ、For next構文の使い方についてです。
> 以下の通り、自分なりに整理しましたが、認識はあっていますでしょうか。
>
> ①今回の使用例
> sub tenki()
> dim saki
> dim kaisu
> for kaisu = 0 to 3
> WorkSheets("Sheet2").range("B" & saki & ":G" & saki).value=Worksheets("sheet1").range("A2:F2").value
> saki = saki +1
> next
> end sub
>
> ②フォローアップ ベーシック 【動画5】
> sub listup()
> dim hida
> dim migi
> migi = 5
> for hida = 8 to 17
> if range("C" & hida).value > 100 then
> range("F"&migi).value = range("A" & hida).value
> range("F"&migi).value = range("A" & hida).value
> range("F"&migi).value = range("A" & hida).value
> migi = migi + 1
> end if
> next
> end sub
>
> ②今までのの使用例は、行や列をある特定の範囲で指定しセルやその範囲を指定するものだったのに対して、
> ①今回の使用例は、For~Nextの間のコードを繰り返すという使い方であるように考えました。
>
> まず、この考え方は合っていますでしょうか。
>
> また、この使用例は基礎講座で初めて出てきた使い方であるという認識であっていますでしょうか。
> 私が見逃している場合は教えていただきたいです。復習したいと思います。


12027 : kanekoさんのコメント (2020-05-05 17:12:45)

理解できない部分があり、フォローアップ ベーシックを読み返してもやはり分からなかったので質問です。
理解できなかったのは、マサラさんが質問した内容と同じ、For next構文の使い方についてです。
以下の通り、自分なりに整理しましたが、認識はあっていますでしょうか。

①今回の使用例
sub tenki()
dim saki
dim kaisu
for kaisu = 0 to 3
WorkSheets("Sheet2").range("B" & saki & ":G" & saki).value=Worksheets("sheet1").range("A2:F2").value
saki = saki +1
next
end sub

②フォローアップ ベーシック 【動画5】
sub listup()
dim hida
dim migi
migi = 5
for hida = 8 to 17
if range("C" & hida).value > 100 then
range("F"&migi).value = range("A" & hida).value
range("F"&migi).value = range("A" & hida).value
range("F"&migi).value = range("A" & hida).value
migi = migi + 1
end if
next
end sub

②今までのの使用例は、行や列をある特定の範囲で指定しセルやその範囲を指定するものだったのに対して、
①今回の使用例は、For~Nextの間のコードを繰り返すという使い方であるように考えました。

まず、この考え方は合っていますでしょうか。

また、この使用例は基礎講座で初めて出てきた使い方であるという認識であっていますでしょうか。
私が見逃している場合は教えていただきたいです。復習したいと思います。


11598 : 小川慶一の回答 (2019-09-27 10:30:38)

受講生 さん:

すいません、ご質問が来ていたのには気がついていたのですが、お返事することをうっかりしていました。
直前の行の右最端にカーソルを置いて改行するとこの場所にカーソルが来ますが...。

ここは、動画に編集入っていそうですね。僕も、手作業ではこのスピードでこの場所にカーソルを持っていくことはできません。
お待たせしたうえにこんなお返事ですみません。


> 小川先生お世話になっております。
> 9:50のNextの上にsakiを挿入する場面で、Nextの上に行を挿入すると同時にTabのようにsakiの入力位置に移動しているのですが、どんな入力をしているのですか?


11595 : 受講生さんのコメント (2019-09-23 03:04:07)

小川先生お世話になっております。
9:50のNextの上にsakiを挿入する場面で、Nextの上に行を挿入すると同時にTabのようにsakiの入力位置に移動しているのですが、どんな入力をしているのですか?


11347 : 小川慶一の回答 (2019-04-12 17:46:14)

ジュリアンさん:

こんにちは。

> For~Nextの構文では、例えば上記の例のgyoのように、
> 特定のセルの値を示すものだと思い込んでおりましたが、

この認識が違います。

「For Next構文は、処理対象のセルを指定するための技術」と、For Next構文を特定の目的と強度に紐づけすぎていると、本質を見失い、抽象度の高い課題に対処できなくなります。

For Next構文は、カウンターの数値を変更しつつ、 For ... Next の間に記述された処理をくり返し実行するものでしかありません。
カウンターたる変数は、 For の直後に指定する。カウンターの最大値は To の直後に記述する。
ただ、それだけです。

その前提でもう一度考えなおしてみてください。
そうすると、

> このkaisuという変数はgyoのような役割ではなく、いわば形式的に置かれていると考えてよろしいのでしょうか?

のような質問はそもそも意味不明だ、と、ご自身で分かるようになるのでは?とも思います。

考えても分からない場合は、さらに質問してもらってもよいですし、もう一度、そういう視点を持ちつつ「エクセルマクロ・VBA基礎編フォローアップ ベーシック」を全問解き直すのもよいかも知れません。

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


> 【動画3】でSheet1からSheet2へ転記が行われる際に、
> For kaisu = 0 To Worksheets("Sheet1").Range("G" & gyo).Value
> というマクロの一文が登場しましたが、正直なところ戸惑いを覚えました。
> このkaisuという変数は、マクロの実行に伴い
> 0→1→2→3
> と4つの値を示し、その後に4回の転記が行われています。
> For~Nextの構文では、例えば上記の例のgyoのように、
> 特定のセルの値を示すものだと思い込んでおりましたが、
> このkaisuという変数はgyoのような役割ではなく、いわば形式的に置かれていると考えてよろしいのでしょうか?


11346 : 山浦 一理さんのコメント (2019-04-12 17:28:41)

【動画3】でSheet1からSheet2へ転記が行われる際に、
For kaisu = 0 To Worksheets("Sheet1").Range("G" & gyo).Value
というマクロの一文が登場しましたが、正直なところ戸惑いを覚えました。
このkaisuという変数は、マクロの実行に伴い
0→1→2→3
と4つの値を示し、その後に4回の転記が行われています。
For~Nextの構文では、例えば上記の例のgyoのように、
特定のセルの値を示すものだと思い込んでおりましたが、
このkaisuという変数はgyoのような役割ではなく、いわば形式的に置かれていると考えてよろしいのでしょうか?


10351 : 小川慶一の回答 (2018-08-09 13:00:48)

morimotoさん:

自分の手元の道具で解決できるはすだ!という意識を持ってとりくんでください。
実務でもそういう姿勢がこれまで以上にご自身を助けてくれますよ☆

> instrで「、」の位置を見つけ次のstart値を変えていく、、、という苦戦したやり方でしました。。。がmidでストレートに文字を探せばシンプルに解決できるのですね。勉強になりました。問題3で「、」の位置を直接求めずいっきにする方法はびっくりしました!。問題2のコードを加工してるだけですね。使う道具はシンプル、あとは
> ほんと応用するだけですね。


10333 : morimotoさんのコメント (2018-08-07 00:11:59)

instrで「、」の位置を見つけ次のstart値を変えていく、、、という苦戦したやり方でしました。。。がmidでストレートに文字を探せばシンプルに解決できるのですね。勉強になりました。問題3で「、」の位置を直接求めずいっきにする方法はびっくりしました!。問題2のコードを加工してるだけですね。使う道具はシンプル、あとは
ほんと応用するだけですね。


9081 : 小川慶一の回答 (2017-10-19 23:20:11)

受講生 さん:

一文字ずつ文字の中身を調べるというのは、案外使います。
発展編2まで行くともっといい方法を学びますが、それまでは重宝するかと思います。

> nagasa = Len(moji)
>
> For n = 1 To nagasa
> If Mid(moji, n, 1) = "、" Then
> kazu = kazu + 1
>
> がポイント!
>  for の新しい使い方を学んだ!


9076 : 受講生さんのコメント (2017-10-19 21:08:25)

nagasa = Len(moji)

For n = 1 To nagasa
If Mid(moji, n, 1) = "、" Then
kazu = kazu + 1

がポイント!
 for の新しい使い方を学んだ!


8574 : 小川慶一の回答 (2017-07-22 13:11:53)

順調そうですね。
ひきつづき、お楽しみください☆

受講生 さん:

> ○動画13:44分付近でfor next 構文でのブレイクポイント(F9)を使ったテスト方法 
> ですがたいへん参考になりました。繰り返し回数毎に変数の中身を確認することがで 
> きるのですね。
>
> ○for カウンター変数 = 最小値 + 最大値
> の書き方で最小値を0とした書き方が勉強になりました。
>  
> ○問題[1]をinstr関数を使い、問題[3]を作成しました。過去に小川先生がコメン
> されているようにmid関数を使った方法の方がわかりやすいと思いました。
> 下記に記載しました。


8571 : 受講生さんのコメント (2017-07-22 09:18:31)

○動画13:44分付近でfor next 構文でのブレイクポイント(F9)を使ったテスト方法 
ですがたいへん参考になりました。繰り返し回数毎に変数の中身を確認することがで 
きるのですね。

○for カウンター変数 = 最小値 + 最大値
の書き方で最小値を0とした書き方が勉強になりました。
 
○問題[1]をinstr関数を使い、問題[3]を作成しました。過去に小川先生がコメン
されているようにmid関数を使った方法の方がわかりやすいと思いました。
下記に記載しました。

Sub lesson02_ikki() 
    Dim moji
    Dim kazu
    Dim n
    Dim nagasa
    
    Dim saki
    saki = 2
    Dim kaisu
    Dim gyo
        
    For gyo = 2 To 7
        kazu = 0
        moji = Worksheets("Sheet1").Range("E" & gyo).Value
        nagasa = Len(moji)
        For kazu = 0 To nagasa
            n = InStr(n + 1, moji, "、")
            If n = 0 Then
                Exit For
            End If
        Next kazu
        
       For kaisu = 0 To kazu
            Worksheets("Sheet2").Range("A" & saki).Value = saki - 1
            Worksheets("Sheet2").Range("B" & saki & ":G" & saki).Value = Worksheets("Sheet1").Range("A" & gyo & ":F" & gyo).Value
            saki = saki + 1
        Next kaisu
    Next gyo
End Sub


6303 : 小川慶一の回答 (2016-04-04 07:10:23)

受講生 さん:

>転記シートの記述位置を示す変数と、元シートの行位置を示す変数を混同していたのです。

変数は、名前を見た瞬間その機能が分かるような名前にしておかないと必ず混同します。


>最初、[1][2]で求めた回数をそのまま使って一つのマクロで書こうと思ったのですが
>すぐに行き詰りました。少し動画を見ると先生も別々のマクロで作っておられたので、その方式で再挑戦。
>(最終的には先生もダイレクトなマクロにされていましたが、いきなりはハードル高いですよね;)
>
>最初、A列の連続文字が1から6までで止まってしまいました。
>動画で確認すると、変数-1の発想もできていたし、見た目ほとんど同じ内容でした。
>(゜-゜)なぜだろう?
>いろいろ調べてみて、変数の使い方が間違っていたと判明しました。
>転記シートの記述位置を示す変数と、元シートの行位置を示す変数を混同していたのです。
>
>やはり転記作業は、変数を正しく使い分けられるかどうかがポイントですね・・・
>形ができても、正しく変数を使えなければ、期待した結果が得られません。
>ちょっと複雑な動きをすると、すぐに変数を混同してしまうので、
>この辺はやはり、慣れなのでしょうか(-ω-;)
>
>しそ巻きカウント辺りを復習してみようと思います。
>

>Sub tenki033008()
>    Dim gyo   '元データの行数
>    Dim tenki '記入シートでの記述行位置
>    Dim kai     '区切り文字の回数
>    Dim kaisu
>    tenki = 2
>    gyo = 2
>    For gyo = 2 To 7
>        kaisu = Worksheets("sheet1").Range("g" & gyo).Value '区切り回数が記述された場所
>        For kai = 0 To kaisu                            '各行の区切り回数だけ繰り返す
>            Worksheets("sheet2").Range("A" & tenki).Value = tenki - 1
>            Worksheets("sheet2").Range("b" & tenki & ":G" & tenki).Value = Worksheets("sheet1").Range("A" & gyo & ":F" & gyo).Value
>            tenki = tenki + 1
>        Next
>    Next
>End Sub
>

>


6290 : 小川慶一の回答 (2016-04-04 06:57:27)

受講生 さん:

配列使えるとまたぜんぜん違うやり方になるんですけどね。
基礎編なんで、手元の道具だけでゴリゴリやる方法をお伝えしています。最初はとにかく腕力が大切。



>最初の[1]のみです。動画を見ずに挑戦しています。
>instrで「、」を検索し、更に2つめの「、」3つめの「、」があるかどうかを調べて、
>その結果によって回数を導く方法を考えました。
>効率の良い方法ではなさそうですが、やってみました。
>

>Sub rensyu033003()     ’「、」が含まれる回数の調査
>    Dim gyo
>    Dim ten         ’1番目の「、」の文字位置
>    Dim ten2          '2番目の「、」の文字位置
>    Dim ten3          '3番目の「、」の文字位置
>    Dim yakuwari        '調査対象の文字列
>    Dim kaisu        '最終的な回答
>    For gyo = 2 To 7
>        yakuwari = Range("E" & gyo).Value        
>         ten = InStr(yakuwari, "、")
>         ten2 = InStr(ten + 1, yakuwari, "、")
>         ten3 = InStr(ten2 + 1, yakuwari, "、")
>        
>        If ten = 0 Then
>            Range("G" & gyo).Value = 0
>        ElseIf ten2 = 0 Then
>            Range("G" & gyo).Value = 1            
>        ElseIf ten2 > 0 And ten3 = 0 Then
>            Range("G" & gyo).Value = 2
>         ElseIf ten3 > 0 Then
>            Range("G" & gyo).Value = 3
>        End If
>        kaisu = Range("g" & gyo).Value
>    Next
>End Sub
>

>by gooska


6224 : 受講生さんのコメント (2016-03-31 13:43:58)

最初、[1][2]で求めた回数をそのまま使って一つのマクロで書こうと思ったのですが
すぐに行き詰りました。少し動画を見ると先生も別々のマクロで作っておられたので、その方式で再挑戦。
(最終的には先生もダイレクトなマクロにされていましたが、いきなりはハードル高いですよね;)

最初、A列の連続文字が1から6までで止まってしまいました。
動画で確認すると、変数-1の発想もできていたし、見た目ほとんど同じ内容でした。
(゜-゜)なぜだろう?
いろいろ調べてみて、変数の使い方が間違っていたと判明しました。
転記シートの記述位置を示す変数と、元シートの行位置を示す変数を混同していたのです。

やはり転記作業は、変数を正しく使い分けられるかどうかがポイントですね・・・
形ができても、正しく変数を使えなければ、期待した結果が得られません。
ちょっと複雑な動きをすると、すぐに変数を混同してしまうので、
この辺はやはり、慣れなのでしょうか(-ω-;)

しそ巻きカウント辺りを復習してみようと思います。

Sub tenki033008()
    Dim gyo   '元データの行数
    Dim tenki '記入シートでの記述行位置
    Dim kai     '区切り文字の回数
    Dim kaisu
    tenki = 2
    gyo = 2
    For gyo = 2 To 7
        kaisu = Worksheets("sheet1").Range("g" & gyo).Value '区切り回数が記述された場所
        For kai = 0 To kaisu                            '各行の区切り回数だけ繰り返す
            Worksheets("sheet2").Range("A" & tenki).Value = tenki - 1
            Worksheets("sheet2").Range("b" & tenki & ":G" & tenki).Value = Worksheets("sheet1").Range("A" & gyo & ":F" & gyo).Value
            tenki = tenki + 1
        Next
    Next
End Sub


6223 : 受講生さんのコメント (2016-03-31 10:09:32)

動画の最初部分、mid関数で1文字ずつ比較するヒントをいただいた時点で止めて
再度自力で取り組んでみました。
変数を沢山使いこなすことが、やはり難しかったです。
時間かかりましたが、[1]と[2]は解けました。
実はForNext関数で繰り返す回数に変数を使えないだろうか?という意識を
以前から持っていたので、今回それに取り組めてよかったです。
※以前、データの最終行をxldownで求めて、それを繰り返す数にあてはめる方法を
質問したことがありましたよね・・・(;´・ω・)
[3]については、まだうまくいきません。うーん(笑)

Sub rensyu03306()   '[1][2]の回答 mid関数で「、」を調べ、数をカウント
    Dim gyo
    Dim yakuwari        '調査する文字列
    Dim n               'yakuwariの文字数
    Dim kai             '「、」の回数をカウント
    Dim chosa           '文字列ごとに行う繰り返し回数
    
     For gyo = 2 To 7   '役割列の行数だけ繰り返す
        kai = 0         'カウント初期化
        yakuwari = Range("E" & gyo).Value
         n = Len(yakuwari)
         For chosa = 1 To n  '「役割」の文字数分だけ繰り返し調査
            If Mid(yakuwari, chosa, 1) = "、" Then   'yakuwariのn番目を「、」と比較
                kai = kai + 1       '「、」が見つかったらカウント
            End If
        Next
    Range("G" & gyo).Value = kai
    Next
End Sub

by gooska


6209 : 受講生さんのコメント (2016-03-30 10:09:57)

最初の[1]のみです。動画を見ずに挑戦しています。
instrで「、」を検索し、更に2つめの「、」3つめの「、」があるかどうかを調べて、
その結果によって回数を導く方法を考えました。
効率の良い方法ではなさそうですが、やってみました。

Sub rensyu033003()     ’「、」が含まれる回数の調査
    Dim gyo
    Dim ten         ’1番目の「、」の文字位置
    Dim ten2          '2番目の「、」の文字位置
    Dim ten3          '3番目の「、」の文字位置
    Dim yakuwari        '調査対象の文字列
    Dim kaisu        '最終的な回答
    For gyo = 2 To 7
        yakuwari = Range("E" & gyo).Value        
         ten = InStr(yakuwari, "、")
         ten2 = InStr(ten + 1, yakuwari, "、")
         ten3 = InStr(ten2 + 1, yakuwari, "、")
        
        If ten = 0 Then
            Range("G" & gyo).Value = 0
        ElseIf ten2 = 0 Then
            Range("G" & gyo).Value = 1            
        ElseIf ten2 > 0 And ten3 = 0 Then
            Range("G" & gyo).Value = 2
         ElseIf ten3 > 0 Then
            Range("G" & gyo).Value = 3
        End If
        kaisu = Range("g" & gyo).Value
    Next
End Sub

by gooska


5617 : 小川慶一の回答 (2016-01-14 21:43:15)

受講生 さん:

もちろんできるとは思います。
Mid関数で一文字づつ取り出して調べるのが楽なだとは思いますが。

>「、」の数を数える際に、動画でInStr関数を使用しかけて途中でやめていましたが、「InStr関数で「、」の位置を調べ、見つかったらカウントアップする」を
>繰り返す方法でも可能であることが分かりました。実際にコードを書き、動作確認しました。
>


5612 : 小川慶一の回答 (2016-01-14 21:32:14)

受講生 さん:

これ基礎編レベルのスキルだけでできたらなかなかのものです。
もっとも、配列使えば簡単ですし、基礎編のスキルだけでなんとかしようてのが間違っている気もしますけどね。

>最初は配列を使う方法を思いつきコードを書いてしまいましたが、動画で「方針」を聞いた後動画を止め、コードを書き直してみました。
>工夫次第で基礎編の知識だけでもできることが分かったのは、発見でした。


5601 : 受講生さんのコメント (2016-01-13 21:48:37)

「、」の数を数える際に、動画でInStr関数を使用しかけて途中でやめていましたが、「InStr関数で「、」の位置を調べ、見つかったらカウントアップする」を
繰り返す方法でも可能であることが分かりました。実際にコードを書き、動作確認しました。


5595 : 受講生さんのコメント (2016-01-12 22:02:06)

最初は配列を使う方法を思いつきコードを書いてしまいましたが、動画で「方針」を聞いた後動画を止め、コードを書き直してみました。
工夫次第で基礎編の知識だけでもできることが分かったのは、発見でした。


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 住所情報を都道府県から市区町村レベルで細かく分割する
    【動画1】 住所情報を都道府県から市区町村レベルで細かく分割する 未習得
  2. 【動画2】 保険料額表から標準報酬額ごとの保険料負担額を算出する
    【動画2】 保険料額表から標準報酬額ごとの保険料負担額を算出する 未習得
  3. 【動画3】 セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する
    【動画3】 セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する 未習得
  4. 【動画4】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す
    【動画4】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す 未習得
  5. 【動画5】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を反映しつつデータ転記する
    【動画5】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を反映しつつデータ転記する 未習得
  6. 【動画6】 VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ
    【動画6】 VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ 未習得
  7. 【動画7】 VLookUp関数、Index関数、Match関数より便利なマクロ-複数シート間、複数ファイル間でのマッチング
    【動画7】 VLookUp関数、Index関数、Match関数より便利なマクロ-複数シート間、複数ファイル間でのマッチング 未習得
  8. 【動画8】 転記先シートを生成してデータを流し込む。
    【動画8】 転記先シートを生成してデータを流し込む。 未習得
  9. 【動画9】 転記先ファイルを生成してデータを流し込む。
    【動画9】 転記先ファイルを生成してデータを流し込む。 未習得
  10. 【動画10】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で作成する。
    【動画10】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で作成する。 未習得
  11. 【動画11】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で同一ファイル内に連続的に作成する。
    【動画11】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で同一ファイル内に連続的に作成する。 未習得
  12. 【動画12】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で複数の別ファイルとして連続的に作成する。
    【動画12】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で複数の別ファイルとして連続的に作成する。 未習得
  13. 【動画13】 ファイル配布→配布先でのデータ記入→記入済データを手元資料に統合
    【動画13】 ファイル配布→配布先でのデータ記入→記入済データを手元資料に統合 未習得
  14. 【動画14】 データ記入用ファイルを配布する-その1
    【動画14】 データ記入用ファイルを配布する-その1 未習得
  15. 【動画15】 データ記入用ファイルを配布する-その2
    【動画15】 データ記入用ファイルを配布する-その2 未習得
  16. 【動画16】 各部署からファイルを回収し、記入済データを手元資料に統合その1
    【動画16】 各部署からファイルを回収し、記入済データを手元資料に統合その1 未習得
  17. 【動画17】 各部署からファイルを回収し、記入済データを手元資料に統合その2
    【動画17】 各部署からファイルを回収し、記入済データを手元資料に統合その2 未習得
  18. 【動画18】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その1)
    【動画18】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その1) 未習得
  19. 【動画19】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-1)
    【動画19】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-1) 未習得
  20. 【動画20】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-2)
    【動画20】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-2) 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ