セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

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

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

解説

演習問題テーマ:セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出します。

以前の問題でも似たようなものはありましたが、今回は、区切り文字がいくつあったとしても動くようなマクロの作成を目指します。

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

11548 : 小川慶一の回答 (2019-08-08 11:19:12)

ゲストさん:

よいですね。
自力で課題を解くといのうのはとてもよい訓練になります。知力と腕力が鍛えられます v(^^*

> 小川先生
> こんにちは。フォローアップ・ベーシックを2回復習し、ようやくアドバンスに来ています。以下自力で作成しました(問題5を投稿)。成功したときは嬉しくて思わず声を出してしまいました。先生の模範解答とは方向性がだいぶ異なりますが、記念に投稿させて下さい。これからもよろしくお願いします。

 Sub mondai5()
    Dim migi
    Dim kugiri '、の出現回数
    Dim n
    Dim mae
    Dim ato
    Dim moji
    moji = Range("D2").Value
    kugiri = Len(moji) \ 7
    migi = 2
    For n = 0 To kugiri
        mae = 7 * n
        ato = 7 + 7 * n
        Range("L" & migi).Value = Mid(moji, mae + 1, ato - mae - 1)
        migi = migi + 1
    Next
End Sub


11544 : ゲストさんのコメント (2019-08-07 10:28:10)

小川先生
こんにちは。フォローアップ・ベーシックを2回復習し、ようやくアドバンスに来ています。以下自力で作成しました(問題5を投稿)。成功したときは嬉しくて思わず声を出してしまいました。先生の模範解答とは方向性がだいぶ異なりますが、記念に投稿させて下さい。これからもよろしくお願いします。

 Sub mondai5()
    Dim migi
    Dim kugiri '、の出現回数
    Dim n
    Dim mae
    Dim ato
    Dim moji
    moji = Range("D2").Value
    kugiri = Len(moji) \ 7
    migi = 2
    For n = 0 To kugiri
        mae = 7 * n
        ato = 7 + 7 * n
        Range("L" & migi).Value = Mid(moji, mae + 1, ato - mae - 1)
        migi = migi + 1
    Next
End Sub


10242 : 小川慶一の回答 (2018-07-09 21:19:02)

ゲストさん:

ちょうど、別の感想に対してこんなお返事書いたところです。

>>問題はどれも取り組み応えあるのですが使っている知識は基礎編の内容のものなので、驚きです。
>特に初期は腕力が大事です。
>腕力がしっかりつけば、実は、知識は対して必要ありません。

以下の、コメント10241。
https://online.pc5bai.com/Movie/index/27/157

多くの方が、基礎を軽視しています。
そして、ここで言う「基礎」とは、まさに基礎編と基礎編フォローアップベーシックで取り扱っている内容です。

> ExcelVBAスタンダードまで取得しているのに、実際はまったく理解できていなかったようです・・・

「エクセルなんちゃら資格」みたいのは、知識を問いますけど、腕力は問われないですからね。
逆に、世の中、そういうのに振り回されたままの人ばかりです。大事なことは何か?ということに今気づけてよかったのかも。

半年もすれば、「ExcelVBAスタンダードまで取得しているのに、実際はまったく理解できていなかったようです・・・」て言っている人に「何が大事か?」ということについて、ゲストさんもアドバイスできるようになりますよ!


> ワークのご指導をありがとうございます。基礎編からやり直してみます。
> ExcelVBAスタンダードまで取得しているのに、実際はまったく理解できていなかったようです・・・かなりやり直さ無くてはいけない部分が多く、正直自分に理解できるのかとても不安ですが、引き続きやってみます。ありがとうございました。


10237 : ゲストさんのコメント (2018-07-09 10:33:26)

ワークのご指導をありがとうございます。基礎編からやり直してみます。
ExcelVBAスタンダードまで取得しているのに、実際はまったく理解できていなかったようです・・・かなりやり直さ無くてはいけない部分が多く、正直自分に理解できるのかとても不安ですが、引き続きやってみます。ありがとうございました。


10233 : 小川慶一の回答 (2018-07-08 15:14:04)

ゲストさん:

>どうにも 「〇〇=△△」というのが、なかなか腑に落ちないところがあります。
>数学も苦手なのは「代入する」という考えがなかなか自分的にしっくりこないせいだと気づきました。

数学苦手ということなので、以下、そういう方向けのアドバイスです。

この演習まで到達しても「しっくりこない」ということですと、「考え」ではなくて、身体にしみついてないのでは?と思います。

この段階で変数への値投入がしっくりこないというのは、数学で言えば、計算問題を確実に解けるだけの(身体に染み付いた)計算能力がない状態で文章題にチャレンジしているようなものです。

ですので、以下にしたがって復習してください。

まずは、分かりきっているはずの手作業。
以下の2つの動画について、実際に手を動かして復習してください。

○基礎講座第1章6 - 手書きする演習
https://online.pc5bai.com/movie/index/25/102

○基礎講座第1章8 - 変数を使ったプログラム、変数を使う意義
https://online.pc5bai.com/movie/index/25/104/

次に、「基礎編フォローアップ アドバンスド」を全問(または、「見た瞬間解けるもの以外すべて)解き直します。

「基礎編フォローアップ アドバンスド」は「基礎編フォローアップ ベーシック」の内容をしっかり(身体に染み付くレベルで)マスターしている(つまり、解説を見ないでもスラスラ解ける)方向けの演習ですので、先に進む前に、「基礎編フォローアップ ベーシック」もひととおり復習されることをおすすめします。
https://online.pc5bai.com/Package/index/27

足元をしっかり固めてからアドバンスドに取り組んだほうが、結果として、近道でしょう。



> > ためしに「mae=ato」を削除してマクロを実行してみましたが、問題無く動きました。
>
> 小川先生、ご返答ありがとうございました。勘違いしていたことはわかりました。失礼しました。どうにも 「〇〇=△△」というのが、なかなか腑に落ちないところがあります。数学も苦手なのは「代入する」という考えがなかなか自分的にしっくりこないせいだと気づきました。ただ、これは練習不足なのだと思います。引き続きワークを続けてみます。


10229 : ゲストさんのコメント (2018-07-08 08:53:25)

> ためしに「mae=ato」を削除してマクロを実行してみましたが、問題無く動きました。

小川先生、ご返答ありがとうございました。勘違いしていたことはわかりました。失礼しました。どうにも 「〇〇=△△」というのが、なかなか腑に落ちないところがあります。数学も苦手なのは「代入する」という考えがなかなか自分的にしっくりこないせいだと気づきました。ただ、これは練習不足なのだと思います。引き続きワークを続けてみます。


10226 : 小川慶一の回答 (2018-07-07 23:35:57)

ゲストさん:

お返事遅くなりました。

> ためしに「mae=ato」を削除してマクロを実行してみましたが、問題無く動きました。

試してみたのですが、同じには、なりませんね...。

○2-4行目:
・mae=atoあり:
栃木 ハナコ 担当(総務)
栃木 ハナコ 担当(経理)
栃木 ハナコ 担当(会計)

・mae=atoなし:
栃木 ハナコ 担当(総務)
栃木 ハナコ 担当(総務)、担当(経理)
栃木 ハナコ 担当(総務)、担当(経理)、担当(会計)

○13-15行目:
・mae=atoあり:
那覇 五郎 担当(総務)
那覇 五郎 担当(経理)
那覇 五郎 担当(会計)

・mae=atoなし:
那覇 五郎 担当(総務)
那覇 五郎 担当(総務)、担当(経理)
那覇 五郎 担当(総務)、担当(経理)、担当(会計)

※mae=atoがプログラム内で2箇所でてくのので、両方とも削除してから実行してください。


上記のとおりですので、結果が必要性をよく物語っているかと思います。
mae=atoがないと、3-4行目、14-15行目で「担当」で拾ってくる文字列を、「D列の先頭から△文字分」となってしまいます。

参考:

○文字列の一部を取り出す(応用例)
https://online.pc5bai.com/movie/index/27/155/



> こんにちは。「【動画4】セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す」において不明点があります。
>
> mae=ato
>
> この部分の意味がよくわかりません。
> その直後に「ato=n」と定義するのに、なぜ先に「mae=ato」を入れなくてはいけないのでしょうか・・・
>
> ためしに「mae=ato」を削除してマクロを実行してみましたが、問題無く動きました。
> お手数ですが、教えてくださると助かります。よろしくお願いいたします。


10221 : ゲストさんのコメント (2018-07-06 11:27:14)

こんにちは。「【動画4】セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す」において不明点があります。

mae=ato

この部分の意味がよくわかりません。
その直後に「ato=n」と定義するのに、なぜ先に「mae=ato」を入れなくてはいけないのでしょうか・・・

ためしに「mae=ato」を削除してマクロを実行してみましたが、問題無く動きました。
お手数ですが、教えてくださると助かります。よろしくお願いいたします。


9831 : 小川慶一の回答 (2018-04-23 19:21:40)

HKさん:

こんばんは。
マクロ、拝見しました。とても良いかと思います。

というか、自力で解けさえすれば、どう言うやり方でもOKです。

実は、「区切り文字の間の文字を切り出して、順に処理する」というのは、発展編2で扱う「配列」と「Split関数」を組み合わせて簡単に解決します。

基礎編は「力技ででも何でも問題を自力解決できる」ということを目指す講座なので、僕もこの動画内では、無理やりゴリゴリと解答しています。


> 別件で質問なのですが、Range("A1")などセルを指定する際、セル列のアルファベットは大文字にするのが主流なのでしょうか?

どちらでも良いかと思います。
・大文字にするなら、セルの列名が大文字なのでそれに従う
・小文字にするなら、コーディングにかかる工数をへらす

ということで、一長一短ですね。
そういうときに、「では、どちらの方法を採用するか?」ということを考えるにあたっては、以下のブログ記事が参考になるかと思います。

[質問] 同じ機能を実現するマクロの書き方が複数ある場合、どの書き方が良いか分からなくて迷います。
https://www.exvba.com/4378/


> 小川先生
>
> お世話になっております。4月頭に講座の申込みをしてから楽しく勉強させてもらっています。
> この問題は、動画を見ない段階でInstr関数を使って以下のように解けました。自分の解法もなかなかシンプルで悪くないのではと思いました。
>
> 別件で質問なのですが、Range("A1")などセルを指定する際、セル列のアルファベットは大文字にするのが主流なのでしょうか?
> 個人的には、マクロはほとんどアルファベット小文字でかけるので、セル指定の時だけ、Shiftキーを押す一手が若干めんどくさく感じます。
> 可読性も個人的には小文字で書いてもあまり変わらないのですが、世の中一般的に普通は大文字で書くということであれば、そのようにしたいと思います。


9829 : HKさんのコメント (2018-04-23 14:37:21)

小川先生

お世話になっております。4月頭に講座の申込みをしてから楽しく勉強させてもらっています。
この問題は、動画を見ない段階でInstr関数を使って以下のように解けました。自分の解法もなかなかシンプルで悪くないのではと思いました。

別件で質問なのですが、Range("A1")などセルを指定する際、セル列のアルファベットは大文字にするのが主流なのでしょうか?
個人的には、マクロはほとんどアルファベット小文字でかけるので、セル指定の時だけ、Shiftキーを押す一手が若干めんどくさく感じます。
可読性も個人的には小文字で書いてもあまり変わらないのですが、世の中一般的に普通は大文字で書くということであれば、そのようにしたいと思います。



Sub test5()
    Dim Sozai As String
    Dim mae As Long
    Dim ato As Long
    Dim kazu As Long
    Dim Yaku As String
    Dim migi As Long
    Dim hida As Long
    Dim Zenyaku As String
    
    migi = 2
    
    For hida = 2 To 7
        Zenyaku = Range("D" & hida).Value
        Sozai = "、" & Zenyaku & "、"
        For kazu = 1 To Len(Zenyaku) + 2
            mae = InStr(Sozai, "、")
            ato = InStr(mae + 1, Sozai, "、")
            If ato = 0 Then
                Exit For
            End If
            Yaku = Mid(Sozai, mae + 1, ato - mae - 1)
            Range("L" & migi).Value = Yaku
            Sozai = Mid(Sozai, ato)
            migi = migi + 1
        Next
    Next
End Sub


8960 : 小川慶一の回答 (2017-09-28 20:34:54)

金子 伊智郎さん:

そうですね。

まさにおっしゃるとおりです。

数学の練習問題と同じです。
解法のストックを多く持つことで、応用問題にアプローチする力がつきます。

ですので、ひとつの課題に対して別解を考える、たとえ別解を自力で導けたとしても模範解答の内容について考察する、といったことはとても有効です。

ひきつづきお楽しみください☆

> 小川慶一さん:
>
> 御指摘ありがとうございます。
> 一旦正常動作した後でもコードを俯瞰してみて無駄を省いたりきれいに
> する作業は必要ですね。
> mae + ato 方式?も以降の課題で試して見ました。
> 目的を達成する手段の引き出しをいっぱい持ちたいです。


8956 : 金子 伊智郎さんのコメント (2017-09-28 16:49:26)

小川慶一さん:

御指摘ありがとうございます。
一旦正常動作した後でもコードを俯瞰してみて無駄を省いたりきれいに
する作業は必要ですね。
mae + ato 方式?も以降の課題で試して見ました。
目的を達成する手段の引き出しをいっぱい持ちたいです。

> 金子 伊智郎さん:
>
> > mae, ato を利用して文字列を切り出すやり方がわかりにくかったので
> > 1文字ずつ連結していく方法で作ってみました。
> > とりあえず結果は同じになりました。
>
> おもしろいアイデアですね。
>
> いただいたサンプルコード、アルゴリズムが明快なのはよいですね。
> 演算回数が多いことがデメリット。
>
> if文の前に
> moji = Mid(yakuwari, idx, 1)
>
> とかを用意して、2回登場する Mid(yakuwari, idx, 1) は、変数を使いまわして演算したほうが少しよさそう。
>
> 例題での僕が提示した解決方法みたいな考え方も重要です。
> 基礎編は道具の組み合わせ方の練習みたいな側面もあるので、僕が提示した方法についても、習熟はしておいてください。いずれあとあと役に立ちます。


8955 : 小川慶一の回答 (2017-09-28 16:42:12)

金子 伊智郎さん:

> mae, ato を利用して文字列を切り出すやり方がわかりにくかったので
> 1文字ずつ連結していく方法で作ってみました。
> とりあえず結果は同じになりました。

おもしろいアイデアですね。

いただいたサンプルコード、アルゴリズムが明快なのはよいですね。
演算回数が多いことがデメリット。

if文の前に
moji = Mid(yakuwari, idx, 1)

とかを用意して、2回登場する Mid(yakuwari, idx, 1) は、変数を使いまわして演算したほうが少しよさそう。

例題での僕が提示した解決方法みたいな考え方も重要です。
基礎編は道具の組み合わせ方の練習みたいな側面もあるので、僕が提示した方法についても、習熟はしておいてください。いずれあとあと役に立ちます。


8946 : 金子 伊智郎さんのコメント (2017-09-27 10:53:04)

動画を最後まで見た際に表示される学習状況ダイアログで "学習済" にできません。
動画1-21までは問題なかったのですが。。。
動画22個別ページの上部のスイッチ?も効きませんね。
細かいことですが。。。


8945 : 金子 伊智郎さんのコメント (2017-09-27 10:45:42)

mae, ato を利用して文字列を切り出すやり方がわかりにくかったので
1文字ずつ連結していく方法で作ってみました。
とりあえず結果は同じになりました。

Sub mondai5()
    Dim mojiretsu
    Dim idx
    Dim yakuwari
    Dim gyo
    Dim hidari
    
    gyo = 2
    For hidari = 2 To 7
        yakuwari = Range("D" & hidari).Value
        For idx = 1 To Len(yakuwari)
            If Mid(yakuwari, idx, 1) = "、" Then
                Range("G" & gyo).Value = Range("B" & hidari).Value
                Range("L" & gyo).Value = mojiretsu
                gyo = gyo + 1
                mojiretsu = ""
            Else
                mojiretsu = mojiretsu & Mid(yakuwari, idx, 1)
            End If
        Next
        Range("G" & gyo).Value = Range("B" & hidari).Value
        Range("L" & gyo).Value = mojiretsu
        gyo = gyo + 1
        mojiretsu = ""
    Next

End Sub


8113 : 小川慶一の回答 (2017-05-12 12:13:06)


受講生 さん:

> そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。

ループ内で自分で変数をいじるとしたら、発展編1で扱う Do Loop構文のほうですね。
Do Loopは、For Nextとは異なり、勝手にカウンターの値が変わっていくということがありません。

> For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ
> 指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?

ループを抜けたあとなら、もう最後の要素しか残っていないので、mid関数の引数は2つで十分でしょうね。

にもかかわらず僕が最後でmid関数の引数をあえて3つ指定したのは、ループ内での表記と統一させるためです。

実は、

[code]
for 文はじまり
なんらかの処理 '[A1]
for 文終わり
なんらかの処理 '[A2]

というのは、よくあるパターンです。
このとき、[A1], [A2]で微妙にでも違うコードを書いてしまうと、可読性やメンテナンス性が落ちるので(*)、可能な限り、[A1], [A2] は同じことを書いたほうがよいです。

(*) [A1], [A2]がまったく同じだと、なんらかの理由で[A1], [A2] でやる処理のロジックを変更するときにも、片方でテストして、OKだったらそれをそのままもう片方にコピペ、で済むので楽。

いただいたコードは、インデントが揃っていないのが気になりますのでそこだけ直しましょう。


8110 : 受講生さんのコメント (2017-05-11 20:26:27)

8100です。
何度も申し訳ございません。
構文の上が切れてしまいました。
貼り直しさせていただきます・・・

Sub kugiritest()
Dim mae
Dim ato
Dim saki
Dim gyo
Dim moji
Dim n

saki = 2

For gyo = 2 To 7
mae = 0
ato = 0
moji = Range("D" & gyo).Value
For n = 1 To Len(moji)
If Mid(moji, n, 1) = "、" Then
mae = ato
ato = n
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1)
saki = saki + 1
End If
Next
mae = ato
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1)
saki = saki + 1
Next
End Sub


8109 : 受講生さんのコメント (2017-05-11 20:21:20)

小川先生

8100の受講生です。
早速お返事いただきありがとうございます。
>For Next構文のカウンターに使う変数は、構文内で変更しないというのが原則です。
そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。
その点を意識し考えてみたところ、最初の構文ではうまくいかず、小川先生の模範通りMidを使って1文字ずつ調べることに落ち着きました。
自分で手直しした構文を回答と見比べたところ、笑ってしまうほど同じで
(当たり前かもしれませんが・・・)とてもうれしくなりました。

For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ
指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?
手直しした構文もぜひ見てください!(回答とほぼ同じですが)
よろしくお願いいたします。
Dim saki
Dim gyo
Dim moji
Dim n

saki = 2

For gyo = 2 To 7
mae = 0
ato = 0
moji = Range("D" & gyo).Value
For n = 1 To Len(moji)
If Mid(moji, n, 1) = "、" Then
mae = ato
ato = n
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1)
saki = saki + 1
End If
Next
mae = ato
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1)
saki = saki + 1
Next
End Sub


8108 : 小川慶一の回答 (2017-05-11 17:07:40)

受講生 さん:

受講生 さん:

コメントありがとうございます。
うれしい限りです。

コードを拝見しました。
For Next構文のカウンターに使う変数は、構文内で変更しないというのが原則です。できてしまうのですが、可読性が著しく落ちるので非推奨です。
その点を意識して、再考&リライトしてみてください。

ぜひ、ひきつづきよい学びを☆


8101 : 受講生さんのコメント (2017-05-11 11:47:03)

以下の8100の受講生です。
Tabがうまく反映されず、見にくいマクロになり申し訳ございません・・・
エクセル上ではTab使ってます。。。


8100 : 受講生さんのコメント (2017-05-11 11:44:47)

小川先生
お世話になります。初コメです。
全くマクロを書けない状態から、順番に動画で学びここまで理解することができました。
小川先生には感謝しかありません!ほんとにわかりやすいです!!

以下、自力で書いてみたマクロです。
先生と同じように動くのですが、問題点はありませんでしょうか?
Sub kugiri6()
Dim mae
Dim ato
Dim saki
Dim gyo
Dim moji

saki = 2

For gyo = 2 To 7
moji = Range("D" & gyo).Value
For mae = 1 To Len(moji)
ato = InStr(mae, moji, "、")
If ato <> 0 Then
Range("L" & saki).Value = Mid(moji, mae, ato - mae)
mae = ato
saki = saki + 1
Else
Range("L" & saki).Value = Mid(moji, mae)
saki = saki + 1
Exit For
End If
Next
Next
End Sub


6327 : 小川慶一の回答 (2016-04-04 07:46:00)

受講生 さん:

しばらく悩んでみてくださいw
どこまで知識がついて知識で解決できることが増えても、最後は腕力ですよ!



>IFの条件が合致したときに、mae=ato ato=n と変数代入するところが難しいですね。
>maeとatoを使って中間文字列を抜き出すのは住所操作の練習とパターンが同じですから
>理解できるのですが、mae=ato が分からない(-ω-;)ウーン 
>今までのパターンで、mae=n となるなら、問題なくわかるのですが、
>同じ法則の変数が2つあると、こうなるパターンなのかな・・・
>この1行が分かれば、あとは全部すらすら行きそうです。
>
>現状では消化が厳しいので、
>後日もっと別のやり方を学習し、やさしく解けるようになりたいと思います。
>gooska


6282 : 受講生さんのコメント (2016-04-03 17:50:08)

IFの条件が合致したときに、mae=ato ato=n と変数代入するところが難しいですね。
maeとatoを使って中間文字列を抜き出すのは住所操作の練習とパターンが同じですから
理解できるのですが、mae=ato が分からない(-ω-;)ウーン 
今までのパターンで、mae=n となるなら、問題なくわかるのですが、
同じ法則の変数が2つあると、こうなるパターンなのかな・・・
この1行が分かれば、あとは全部すらすら行きそうです。

現状では消化が厳しいので、
後日もっと別のやり方を学習し、やさしく解けるようになりたいと思います。
gooska


6237 : 受講生さんのコメント (2016-03-31 19:52:31)

スキル=知識×腕力なのですか(-ω-;)
発展編の知識が取得できれば、、、腕力なくても簡単に解けるのですね。
資源のない貧乏小国が、自転車操業しているイメージの自分・・・(ノ´∀`*)
今は貧乏なので・・・筋トレあるのみ・・・!!(笑)
gooska


6235 : 受講生さんのコメント (2016-03-31 19:47:13)

前回の難問を解くために、分解してステップを踏む問題ですね。
設問を見て、考え方の方向はつかめていたと感じました。
以下は自力の回答[1]です。Exit Forを使って、回数を上書きしない方法で考えました。
一度のIF文で2つの変数値を一度に獲得する方法には至りませんでした。
0文字目を想定する考え方、まだ理解してないです。
動画少しずつ勉強してみます。

Sub rensyu033108()
    Dim yakuwari    '調査対象をyakuwariとする
    Dim n           '調査を繰り返す数
    Dim moji
    Dim mae
    Dim ato
    yakuwari = Range("D2").Value
    moji = Len(yakuwari)       ' 文字数を調べて格納する 
    For n = 1 To moji  '文字の数だけ繰り返す
        If Mid(yakuwari, n, 1) = "、" Then
            mae = n
            Range("H2").Value = mae
            Exit For        '1度見つけたらループ終了
        End If
    Next
        For n = mae To moji  '文字の数だけ繰り返す                
         If Mid(yakuwari, n + 1, 1) = "、" Then
            ato = n + 1
            Range("I2").Value = ato
         Exit For           '1度見つけたらループ終了
        End If
     Next
    Range("L3").Value = Mid(yakuwari, mae + 1, ato - mae - 1)   
End Sub

by gooska


5613 : 小川慶一の回答 (2016-01-14 21:33:17)

受講生 さん:

スキル=知識×腕力

です。腕力があれば基礎編だけでもやりきれます。たいていの方はそんなに腕力ないので、そこまでやるなら発展編で知識をつけられることをおすすめしまね。

>ここまでくると、さすがに基礎編の知識のみでは手間がかかりますね。
>この発想自体が、私にとっては難しいと思いました。
>配列を使用すると、もっと楽に、かつスッキリとコードが書けました。


5596 : 受講生さんのコメント (2016-01-12 22:04:24)

ここまでくると、さすがに基礎編の知識のみでは手間がかかりますね。
この発想自体が、私にとっては難しいと思いました。
配列を使用すると、もっと楽に、かつスッキリとコードが書けました。


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) 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ