文字列を加工してデータ転記する(その1)

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

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

解説

演習問題テーマ:文字列を加工してデータ転記する(その1)

セミナーで学習したLeft関数、Mid関数、Instr関数をどう使うかみてください。

Instr関数をつかって区切りの字が何文字目にあるのかを調べる変数をたてるのがポイント。そうすると区切りの字の後からの情報がほしいときは変数+1、前までなら変数−1と表現できるということに注目。

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

10560 : 小川慶一の回答 (2018-09-10 10:07:59)

Matsumotoさん:

手応えを感じられるというのはいいことです☆

> 住所分割のマクロ久々です。
> 本編で学習から約2週間たっていたので
> 記憶も朧でしたが、回答できました。
>
> スラスラとは程遠く、
> 記憶を呼び起こすように一行ずつ動作確認しながらですが、
> 最終的に動いたときの喜びは大きいですね。
>
> ただ、絶対的な練習量が少ないので、
> 何度も復習=マクロを書いて、
> 問題を見た瞬間に体が動くようにしたいです。
> (九九のようにですよね)


10556 : Matsumotoさんのコメント (2018-09-08 17:04:44)

住所分割のマクロ久々です。
本編で学習から約2週間たっていたので
記憶も朧でしたが、回答できました。

スラスラとは程遠く、
記憶を呼び起こすように一行ずつ動作確認しながらですが、
最終的に動いたときの喜びは大きいですね。

ただ、絶対的な練習量が少ないので、
何度も復習=マクロを書いて、
問題を見た瞬間に体が動くようにしたいです。
(九九のようにですよね)


9293 : 小川慶一の回答 (2017-12-25 10:42:37)

受講生 さん:

> (知っている関数だけれど、引数などをはっきり覚えていない時にどうするか?の練習にもなりました)

こういうスキル、地味に大切です。

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


9289 : 受講生さんのコメント (2017-12-24 21:42:30)

馴染みのある懐かしい住所分割問題です。
Left関数や、Instr関数を扱うのも久しぶりなので、
一つずつ動作の確認をとる1行マクロを試しながら、
自力で回答できました。
(知っている関数だけれど、引数などをはっきり覚えていない時にどうするか?の練習にもなりました)

ところが、先生の動画を見て、
「同じ文字列を変数に置き換える」というステップが
足りなかったことに気がついたので、
もう一度書き直してみます。
実は、instr関数の値に+したり-したりをずらずら書くと
結構間違いやすくて修正も増えるので、
「あれ?昔解いた時、こんなに複雑な長い式だったかな・・」と思ったんですよね。
可読性とミスを減らすためにも、変数を上手に使う必要が
ありますね。
gooska


9232 : 小川慶一の回答 (2017-12-15 13:13:08)

吉川 裕子さん:

コメントありがとうございます。

> 普通の参考書では答えがばーんとあるだけで、そこにたどり着くまでの道順が難しくてあきらめてしまうということもあるかと思います。
> 「まずはとりあえず書いてみる」というように簡単なところからとにかく書いてみようと思いました。

ここの部分がいちばん大切なんですよね。。

文字列は、数値と同様にエクセル表に頻出するデータです。
文字列加工のバラエティについては、基礎編-発展編2の中でかなりしっかり扱っています。

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


9231 : ガラパゴスタディー吉川の回答 (2017-12-14 16:03:28)

文字列を扱う関数は、マクロで利用することがあまりなかったので、とても勉強になりました。
動画を拝見し、特に勉強になるのはマクロを書いていく道順です。
普通の参考書では答えがばーんとあるだけで、そこにたどり着くまでの道順が難しくてあきらめてしまうということもあるかと思います。
「まずはとりあえず書いてみる」というように簡単なところからとにかく書いてみようと思いました。


8874 : 小川慶一の回答 (2017-09-14 10:50:31)

受講生 さん:

どんどん進めましょう!
書けば書くほど上達します☆

> Left関数、Mid関数、Instr関数の復習になった。
> どんどん書く練習をすすめるぞ!


8870 : 受講生さんのコメント (2017-09-12 21:05:25)

Left関数、Mid関数、Instr関数の復習になった。
どんどん書く練習をすすめるぞ!


6451 : 小川慶一の回答 (2016-04-18 11:08:25)

岩瀬真子 さん:

ループの中で変数宣言をしていると、こびとちゃんは、その変数宣言をしている行にくる都度、新たに変数を作るところから作業をします。
ループの外であらかじめ宣言した変数を使い回すのであれば、上記のステップは不要で、こびとちゃんは、ただ変数に格納された値を上書きするだけです。

という説明でどうかな?


>小川先生、
>回答していただきどうもありがとうございました。
>動けばどれも正解、あとは好みということで、こういうものかと納得です。
>
>”あえて言うなら、変数宣言は、ループの外にあったほうかよいです。(←その理由は分かりますか?)”、この部分なのですが、なんとなくわかる感じがするのですが、はっきりにんしきできていません。理由を教えてください 宜しくお願いいたします。


6434 : 岩瀬真子さんのコメント (2016-04-15 23:14:34)

小川先生、
回答していただきどうもありがとうございました。
動けばどれも正解、あとは好みということで、こういうものかと納得です。

”あえて言うなら、変数宣言は、ループの外にあったほうかよいです。(←その理由は分かりますか?)”、この部分なのですが、なんとなくわかる感じがするのですが、はっきりにんしきできていません。理由を教えてください 宜しくお願いいたします。






小川慶一 さん:

>受講生 さん:
>
>こんにちは。
>
>>Dim jusho の位置がDim ku の上に入ることにより Ku-Instra(Range,,,,,の文と引き離されてしまっているように思います。
>
>気になるのはごもっともです。
>では、どういう順序が適切なのか。。?というと。
>
>「ズバリ、動けばどれも正解」です。あとは好み。
>ただ、あえて言うなら、変数宣言は、ループの外にあったほうかよいです。(←その理由は分かりますか?)
>


6403 : 小川慶一の回答 (2016-04-12 10:49:03)

受講生 さん:

こんにちは。

>Dim jusho の位置がDim ku の上に入ることにより Ku-Instra(Range,,,,,の文と引き離されてしまっているように思います。

気になるのはごもっともです。
では、どういう順序が適切なのか。。?というと。

「ズバリ、動けばどれも正解」です。あとは好み。
ただ、あえて言うなら、変数宣言は、ループの外にあったほうかよいです。(←その理由は分かりますか?)


6375 : 受講生さんのコメント (2016-04-10 21:57:20)

小川先生 こんばんは
今月基礎講座始めました 今日は初めて質問させていただきます 宜しくお願いいたします
(3:06)くらいの時ですが それまでのSubは、

 Sub kubunnkatu()
                  Dim ku
                  Ku=Instr(Range("C2").Value, "区")
                  Range("F2"). value=Left(Range"C2", Value, Ku)..........


となっていたものを ここでDim jusho とjusho=
Range("C2"). valueを加えていくわけですが、

 Sub kubunnkatu()
                  Dim jusho 
     Dim ku
                  jusho=Range("C2"). value
     Ku=Instr(Range("C2").Value, "区")
                  Range("F2"). value=Left(Range"C2", Value, Ku)..........
となるのでしょうか?
Dim jusho の位置がDim ku の上に入ることにより Ku-Instra(Range,,,,,の文と引き離されてしまっているように思います。
なにか書き方にルールがあるのでしょうか? こういう微妙なところがわかりません おしえてください

ペンネーム:ぺる


6115 : 小川慶一の回答 (2016-03-25 07:33:55)

受講生 さん:

このペースで学ばれる方にとっては復習問題ですね (^^;
通常のペースで学ばれる方にとっては、「やったけど覚えてない」ということもちらほら (^^;

>今回は、今までの復習問題でしたね。
>全問解いてから動画を見ています。1,2は、先生と同じような形で書けました。
>今回のような使い方をするleft、MID、instr操作はマスターできたと思います。
>後半部分、次の動画で先生の回答と比較したいと思います。
>by gooska


6109 : 受講生さんのコメント (2016-03-24 19:25:18)

今回は、今までの復習問題でしたね。
全問解いてから動画を見ています。1,2は、先生と同じような形で書けました。
今回のような使い方をするleft、MID、instr操作はマスターできたと思います。
後半部分、次の動画で先生の回答と比較したいと思います。
by gooska


5921 : 小川慶一の回答 (2016-03-08 23:22:37)

受講生 さん:

まずは動けばOKです。
そして、次のステップは、渋谷区でも世田谷区でも港区でも動くようにすること ヾ(´ー`)ノ


>お世話になります。
>仕事で必要で、少し複雑なMID関数をマクロで強引に当てはめてみました。なんだかできちゃいましたが・・
>
>わかっていることは、①全部で16文字 ②11文字目がいつも丁 ③最初の1文字と最後の3文字は必要ない
>          ④”-”の前は AかBかC
>C列の文字を以下条件でG列に抜き出す
>例)”東京都渋谷A代々木4丁目5番地よ” を ”京都渋谷A-代々木45” としたい。
>2文字目から5文字取り出し”-”を入れる&7文字目から4文字取り出し&2文字飛ばして&13文字目の1文字を取り出す。
>これを1つの文字として 別台帳に転記する。
>
>今回は規則性なし(この場合の規則性が当てはまるのかもわからなかったので・・^:^;)
>単純に関数の式を当てはめました。
>Sub MMM()
> Dim NAMAE
> Dim GYO
> For GYO = 2 To 51
> NAMAE = Range("C" & GYO).Value
> Range("G" & GYO).Value = MID(NAMAE, 2, 5) & "-" & MID(NAMAE, 7, 4) & MID(NAMAE, 13, 1)
> Next
>End Sub
>
> できちゃったからいいのか?とも思いましたが
> 他に良い方法があれば教えてください。


5917 : 受講生さんのコメント (2016-03-08 02:25:17)

お世話になります。
仕事で必要で、少し複雑なMID関数をマクロで強引に当てはめてみました。なんだかできちゃいましたが・・

わかっていることは、①全部で16文字 ②11文字目がいつも丁 ③最初の1文字と最後の3文字は必要ない
          ④”-”の前は AかBかC
C列の文字を以下条件でG列に抜き出す
例)”東京都渋谷A代々木4丁目5番地よ” を ”京都渋谷A-代々木45” としたい。
2文字目から5文字取り出し”-”を入れる&7文字目から4文字取り出し&2文字飛ばして&13文字目の1文字を取り出す。
これを1つの文字として 別台帳に転記する。

今回は規則性なし(この場合の規則性が当てはまるのかもわからなかったので・・^:^;)
単純に関数の式を当てはめました。
Sub MMM()
Dim NAMAE
Dim GYO
For GYO = 2 To 51
NAMAE = Range("C" & GYO).Value
Range("G" & GYO).Value = MID(NAMAE, 2, 5) & "-" & MID(NAMAE, 7, 4) & MID(NAMAE, 13, 1)
Next
End Sub

できちゃったからいいのか?とも思いましたが
 他に良い方法があれば教えてください。


5378 : 小川慶一の回答 (2015-12-03 13:42:01)

受講生 さん:

よかったです。ひきつづきお楽しみを!

>小川様
>ループの中に入れるメリットがないことがよくわかりました!
>ありがとうございます。
>


5376 : 受講生さんのコメント (2015-12-02 22:52:23)

小川様
ループの中に入れるメリットがないことがよくわかりました!
ありがとうございます。


5365 : 小川慶一の回答 (2015-12-02 08:26:12)

受講生 さん:

ループの中に変数宣言があると、こびとちゃんは、その変数宣言に来るたびに新たに変数を作り直します。
そして、そうすることのメリットはないです。

というのが簡潔な説明なのですが、これでご理解いただけるでしょうか?

>お疲れ様です。変数が何個かでてきたときに ハナコでくくるときは、他の変数は外側にだしておいたほうがいいですか?
>どこに書いても同じかと思ったのですが、ハナコでくくる位置は一番外側ではなくて、内側のほうがいいのでしょうか。
>
>Sub rensyu1()
> Dim gyo
> For gyo = 2 To 50
> Dim jyusyo
> jyusyo = Range("C" & gyo).Value
> Dim ku
> ku = InStr(jyusyo, "区")
> Range("F" & gyo).Value = Left(jyusyo, ku)
> Range("G" & gyo).Value = Mid(jyusyo, ku + 1)
> Next
>End Sub


5355 : 受講生さんのコメント (2015-11-30 23:31:43)

お疲れ様です。変数が何個かでてきたときに ハナコでくくるときは、他の変数は外側にだしておいたほうがいいですか?
どこに書いても同じかと思ったのですが、ハナコでくくる位置は一番外側ではなくて、内側のほうがいいのでしょうか。

Sub rensyu1()
Dim gyo
For gyo = 2 To 50
Dim jyusyo
jyusyo = Range("C" & gyo).Value
Dim ku
ku = InStr(jyusyo, "区")
Range("F" & gyo).Value = Left(jyusyo, ku)
Range("G" & gyo).Value = Mid(jyusyo, ku + 1)
Next
End Sub


1816 : 小川慶一の回答 (2014-07-25 05:48:28)

明石 照伸 さん:

はい!模範解答もみてみてください。
ひきつづきよろしくお願いいたします (^^

>小川慶一 さん:
>
>コメントありがとうございます。(^^
>
>ちょっとIF~Else~のところの流れがいけてない
>感じがしていたのですが、小川さんのアドバイスで
>もうすこしすっきりかけそうな気がします。
>
>試しながらやってみます。(^^
>
>
>
>
>>明石 照伸 さん:
>>
>>楽しんでますね!
>>
>>設問[3]について。
>>Right関数を使うという発想、とてもよいと思います!
>>
>>設問[4], [5] について。
>>
>>たとえば[4]について言うと、If文の中で以下の2行が True のとき False のときの2回登場していますね。
>>そこの冗長さを解決したいです。
>>
>>

            Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>>            Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)

>>
>>ひきつづきお楽しみを!
>>
>>
>>
>>>お世話になります。
>>>
>>>上記設問[3]、[4]、[5]について以下回答案作成してみました。
>>>アドバイス等いただけますと幸いです。
>>>
>>>よろしくお願いいたします。
>>>
>>>===設問[3] ここから===
>>>
>>>Sub furiwake3()
>>> Dim kugiri1 '文字列の最初の区切り
>>> Dim kugiri2 '文字列の2番目の区切り
>>> Dim nagasa '文字列の長さ
>>> Dim gyo
>>>
>>> For gyo = 2 To 51
>>> kugiri1 = InStr(1, Range("e" & gyo).Value, "線")
>>> kugiri2 = InStr(1, Range("e" & gyo).Value, "駅")
>>> nagasa = Len(Range("e" & gyo).Value)
>>>
>>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri1)
>>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri1 + 1, nagasa - kugiri2 + 1)
>>> Range("J" & gyo).Value = Right(Range("e" & gyo).Value, nagasa - kugiri2)
>>>
>>>
>>> Next
>>>
>>>
>>>
>>>End Sub
>>>===設問[3] ここまで===
>>>
>>>
>>>===設問[4] ここから===
>>>
>>>Sub furiwake4()
>>> Dim gyo
>>> For gyo = 2 To 11
>>> Dim kugiri
>>> kugiri = InStr(Range("c" & gyo).Value, "区")
>>>
>>> If kugiri > 0 Then
>>> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>>> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>>>
>>> Else
>>> kugiri = InStr(Range("c" & gyo).Value, "市")
>>> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>>> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>>>
>>> End If
>>>
>>> Next
>>>
>>>
>>>
>>>End Sub
>>>===設問[4] ここまで===
>>>
>>>===設問[5] ここから===
>>>
>>>Sub furiwake5()
>>>
>>> Dim kugiri
>>> Dim gyo
>>>
>>> For gyo = 2 To 11
>>> kugiri = InStr(Range("e" & gyo).Value, "線")
>>> If kugiri > 0 Then
>>>
>>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
>>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>>>
>>> Else
>>> kugiri = InStr(Range("e" & gyo).Value, "ル")
>>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
>>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>>>
>>> End If
>>>
>>> Next
>>>
>>>
>>>
>>>End Sub
>>>===設問[5] ここまで===
>>
>


1814 : 明石 照伸さんのコメント (2014-07-24 21:03:07)

小川慶一 さん:

コメントありがとうございます。(^^

ちょっとIF~Else~のところの流れがいけてない
感じがしていたのですが、小川さんのアドバイスで
もうすこしすっきりかけそうな気がします。

試しながらやってみます。(^^




>明石 照伸 さん:
>
>楽しんでますね!
>
>設問[3]について。
>Right関数を使うという発想、とてもよいと思います!
>
>設問[4], [5] について。
>
>たとえば[4]について言うと、If文の中で以下の2行が True のとき False のときの2回登場していますね。
>そこの冗長さを解決したいです。
>
>

            Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>            Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)

>
>ひきつづきお楽しみを!
>
>
>
>>お世話になります。
>>
>>上記設問[3]、[4]、[5]について以下回答案作成してみました。
>>アドバイス等いただけますと幸いです。
>>
>>よろしくお願いいたします。
>>
>>===設問[3] ここから===
>>
>>Sub furiwake3()
>> Dim kugiri1 '文字列の最初の区切り
>> Dim kugiri2 '文字列の2番目の区切り
>> Dim nagasa '文字列の長さ
>> Dim gyo
>>
>> For gyo = 2 To 51
>> kugiri1 = InStr(1, Range("e" & gyo).Value, "線")
>> kugiri2 = InStr(1, Range("e" & gyo).Value, "駅")
>> nagasa = Len(Range("e" & gyo).Value)
>>
>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri1)
>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri1 + 1, nagasa - kugiri2 + 1)
>> Range("J" & gyo).Value = Right(Range("e" & gyo).Value, nagasa - kugiri2)
>>
>>
>> Next
>>
>>
>>
>>End Sub
>>===設問[3] ここまで===
>>
>>
>>===設問[4] ここから===
>>
>>Sub furiwake4()
>> Dim gyo
>> For gyo = 2 To 11
>> Dim kugiri
>> kugiri = InStr(Range("c" & gyo).Value, "区")
>>
>> If kugiri > 0 Then
>> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>>
>> Else
>> kugiri = InStr(Range("c" & gyo).Value, "市")
>> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
>> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>>
>> End If
>>
>> Next
>>
>>
>>
>>End Sub
>>===設問[4] ここまで===
>>
>>===設問[5] ここから===
>>
>>Sub furiwake5()
>>
>> Dim kugiri
>> Dim gyo
>>
>> For gyo = 2 To 11
>> kugiri = InStr(Range("e" & gyo).Value, "線")
>> If kugiri > 0 Then
>>
>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>>
>> Else
>> kugiri = InStr(Range("e" & gyo).Value, "ル")
>> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
>> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>>
>> End If
>>
>> Next
>>
>>
>>
>>End Sub
>>===設問[5] ここまで===
>


1813 : 小川慶一の回答 (2014-07-24 09:25:12)

明石 照伸 さん:

楽しんでますね!

設問[3]について。
Right関数を使うという発想、とてもよいと思います!

設問[4], [5] について。

たとえば[4]について言うと、If文の中で以下の2行が True のとき False のときの2回登場していますね。
そこの冗長さを解決したいです。

            Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
            Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)


ひきつづきお楽しみを!



>お世話になります。
>
>上記設問[3]、[4]、[5]について以下回答案作成してみました。
>アドバイス等いただけますと幸いです。
>
>よろしくお願いいたします。
>
>===設問[3] ここから===
>
>Sub furiwake3()
> Dim kugiri1 '文字列の最初の区切り
> Dim kugiri2 '文字列の2番目の区切り
> Dim nagasa '文字列の長さ
> Dim gyo
>
> For gyo = 2 To 51
> kugiri1 = InStr(1, Range("e" & gyo).Value, "線")
> kugiri2 = InStr(1, Range("e" & gyo).Value, "駅")
> nagasa = Len(Range("e" & gyo).Value)
>
> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri1)
> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri1 + 1, nagasa - kugiri2 + 1)
> Range("J" & gyo).Value = Right(Range("e" & gyo).Value, nagasa - kugiri2)
>
>
> Next
>
>
>
>End Sub
>===設問[3] ここまで===
>
>
>===設問[4] ここから===
>
>Sub furiwake4()
> Dim gyo
> For gyo = 2 To 11
> Dim kugiri
> kugiri = InStr(Range("c" & gyo).Value, "区")
>
> If kugiri > 0 Then
> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>
> Else
> kugiri = InStr(Range("c" & gyo).Value, "市")
> Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
> Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)
>
> End If
>
> Next
>
>
>
>End Sub
>===設問[4] ここまで===
>
>===設問[5] ここから===
>
>Sub furiwake5()
>
> Dim kugiri
> Dim gyo
>
> For gyo = 2 To 11
> kugiri = InStr(Range("e" & gyo).Value, "線")
> If kugiri > 0 Then
>
> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>
> Else
> kugiri = InStr(Range("e" & gyo).Value, "ル")
> Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
> Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)
>
> End If
>
> Next
>
>
>
>End Sub
>===設問[5] ここまで===


1809 : 明石 照伸さんのコメント (2014-07-23 23:49:46)

お世話になります。

上記設問[3]、[4]、[5]について以下回答案作成してみました。
アドバイス等いただけますと幸いです。

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

===設問[3] ここから===

Sub furiwake3()
Dim kugiri1 '文字列の最初の区切り
Dim kugiri2 '文字列の2番目の区切り
Dim nagasa '文字列の長さ
Dim gyo

For gyo = 2 To 51
kugiri1 = InStr(1, Range("e" & gyo).Value, "線")
kugiri2 = InStr(1, Range("e" & gyo).Value, "駅")
nagasa = Len(Range("e" & gyo).Value)

Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri1)
Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri1 + 1, nagasa - kugiri2 + 1)
Range("J" & gyo).Value = Right(Range("e" & gyo).Value, nagasa - kugiri2)


Next



End Sub
===設問[3] ここまで===


===設問[4] ここから===

Sub furiwake4()
Dim gyo
For gyo = 2 To 11
Dim kugiri
kugiri = InStr(Range("c" & gyo).Value, "区")

If kugiri > 0 Then
Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)

Else
kugiri = InStr(Range("c" & gyo).Value, "市")
Range("f" & gyo).Value = Left(Range("c" & gyo).Value, kugiri)
Range("g" & gyo).Value = Mid(Range("c" & gyo).Value, kugiri + 1)

End If

Next



End Sub
===設問[4] ここまで===

===設問[5] ここから===

Sub furiwake5()

Dim kugiri
Dim gyo

For gyo = 2 To 11
kugiri = InStr(Range("e" & gyo).Value, "線")
If kugiri > 0 Then

Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)

Else
kugiri = InStr(Range("e" & gyo).Value, "ル")
Range("h" & gyo).Value = Left(Range("e" & gyo).Value, kugiri)
Range("i" & gyo).Value = Mid(Range("e" & gyo).Value, kugiri + 1)

End If

Next



End Sub
===設問[5] ここまで===


1088 : 小川慶一の回答 (2014-03-24 07:27:03)

薄木洋祐 さん:

よかったです!ひきつづき、お楽しみを!

>いい復習になりました!


1087 : 薄木洋祐さんのコメント (2014-03-23 14:56:29)

いい復習になりました!


964 : 小川慶一の回答 (2014-01-18 12:42:04)

匿名さん:

いい感じですね。そのまま、見た瞬間答えが頭に浮かぶようになるまで続けてください。

>動画を見てスーっと入っていくような感じがして楽しくなってきました。


963 : 受講生さんのコメント (2014-01-18 10:44:37)

動画を見てスーっと入っていくような感じがして楽しくなってきました。


219 : ガラパゴスタディー事務局の回答 (2013-09-02 00:01:00)

小俣さん:

> 変数を使うとプロシージャの見通しがとても良くなりますね。

さっき、No.6でのコメントで北嶋さん案に感じたのはそれです。
工数が増えて小人ちゃんの手間と処理時間という面では不利ですが、可読性は高いです。


> 変なところでまじめなもので、変数名をつけるのについつい真剣になっちゃって軽く心理的負荷がかかるんです。

「このくらいのプログラムはサクっと書ける」というステージに来ると、悩まなくなると思います。
名前をつける行為が自分にとって日常的なことになるからです。

もっとも、僕でも、メチャクチャにたくさん変数が登場するマクロを作るときは悩みますよ。


218 : ガラパゴスタディー事務局の回答 (2013-09-02 00:00:00)

北嶋さん:

> 繰り返し出てくるものは変数に置き換えるとコードがすっきりしていいですね。

ですね。理屈レベルでなく、感覚レベルにすっきりしているかどうかを感じられるようになるとよいです。
プログラムを書き上げる過程でも同様です。


217 : 小俣卓生さんのコメント (2013-09-01 00:00:00)

変数を使うとプロシージャの見通しがとても良くなりますね。

変なところでまじめなもので、変数名をつけるのについつい真剣になっちゃって軽く心理的負荷がかかるんです。

ちょっと考えてみると何かに名前をつけてあげる行為って日常生活ではあまりしないんですよね。
新しく家にきたペットとか生まれた子どもとか自社が開発した商品名なんかでとても限定された状況で、しかも、かなり重大責任が伴うのでその感覚にとらわれるんでしょうね。

これからはバシバシ色々なものに名前をつけてあげてようと思います。


216 : 北嶋浩行さんのコメント (2013-08-31 00:00:00)

繰り返し出てくるものは変数に置き換えるとコードがすっきりしていいですね。
今回の課題は1~3は問題なく解けましたが、4・5で少しひっかかりました。
プログラムは完成したのですが、もっとシンプルに書ける気がします。
次回の解説を楽しみにしています。


215 : ガラパゴスタディー事務局の回答 (2013-07-08 00:01:00)

平井さん:

了解です。ひきつづき、お楽しみを☆


214 : 平井孝代さんのコメント (2013-07-08 00:00:00)

コメントありがとうございました!
今の目標は楽しく動画を浴びるように見ること。
?と思った部分は何回も再生しています。
後は時間と格闘しながら書くこと。
とにかくキー操作に慣れること。
必ずサンプルデータは開いてマクロは動かしています!


213 : ガラパゴスタディー事務局の回答 (2013-07-07 00:01:00)

平井さん:

> マクロを書いている途中にその都度ケース毎にテストをするということを習慣にすることが今後非常に重要になると思いながらも」

という前提のあるなしにかかわらず

> 動画を見るだけにしてしまっているのはよくないですよね。

見ていないのに比したらかなりよいです。ご自身で手を動かされたほうがさらによいです。

とりあえず、サンプルデータ開いて、 [alt] + [f11] してみて。
それだけでも、見るだけにしているよりかなりよいから ヾ(´ー`)ノ


212 : 平井孝代さんのコメント (2013-07-07 00:00:00)

マクロを書いている途中にその都度ケース毎にテストをするということを習慣にすることが今後非常に重要になると思いながらも動画を見るだけにしてしまっているのはよくないですよね。


211 : ガラパゴスタディー事務局の回答 (2013-06-13 00:00:00)

土田さん:

> 繰り返し使用するものは変数に置き換えると、スッキリしてわかりやすくなるということに

そうそう。そこがミソ。
マインドマップ13枚目を再度見てみてください。
どういうときに変数を使うべき、書いていますので。


210 : 土田 信行さんのコメント (2013-06-12 00:00:00)

問題の[1][2][3]は問題なくできました。ただ、繰り返し使用するものは変数に置き換えると、スッキリしてわかりやすくなるということに気がつきませんでした。

[4][5]に関しては回答がないのですっきりしていないのですが、先のコメントにあったようにIf文を使ってInStr関数の数値を利用する事で対応しました。ただ、同じ文字が含まれる場合にどうしたらよいのか…何かあるのとは思うのですがわかりませんでした。


209 : ガラパゴスタディー事務局の回答 (2013-04-08 00:00:00)

池本さん:

こんにちは。

> いきなりinstr関数を使うよりも、私にはとってもわかりやすい動画の説明でした♪

そうかもしれないですね。セミナー本番の進め方に反映できないか、考えてみたいです。


208 : 池本利恵さんのコメント (2013-04-06 00:00:00)

こんにちは~(^^)

今日の問題はsubととりあえず書いてみるプリントだとわかったのでそれをみて復習しながら解いてから動画をみました。

動画をみて、セミナーのときと、プリントをみながら何回かやったときに、わかったけどのみこめてなかったところが、ようやくしっくりしました。
具体的には、
left関数を使って区まで、線までの値、
mid関数を使って区以降、線以降の値、
をいれてみてから、区や線までの文字数の違いに対応するためにinstr関数を使うというところです。
いきなりinstr関数を使うよりも、私にはとってもわかりやすい動画の説明でした♪

day8も楽しみにしていま~す☆


207 : ガラパゴスタディー事務局の回答 (2013-01-27 00:00:00)

山根さん:

あと10日もすれば、そういうミスはぜったいしなくなる or しても一瞬で分かるようになることでしょう。

またしばらくしたら、この問題見に来てください。
ご自身の上達ふりを実感できるかと思います。


206 : 山根信行さんのコメント (2013-01-26 00:00:00)

Instr関数で区の位置を変数に代入するのをFor以前に記述してしまいエラー。
カウンタ変数の中身がからっぽなので当然ですね。
[1][2]は大丈夫です。


205 : ガラパゴスタディー事務局の回答 (2012-11-20 00:01:00)

達人養成塾 小川です。

しっかり実力がついていることも、実感できるかと思います。

ひきつづき、お楽しみを!


204 : 佐藤 尚子さんのコメント (2012-11-20 00:00:00)

講座でやった内容だったので理解しやすかったです。ちょっと安心しました。


203 : 長江秀展さんのコメント (2012-10-30 00:00:00)

問題1,2までは順調でした。
セミナー時の光景を思い出しました。


202 : 久武 美香さんのコメント (2012-10-17 00:00:00)

セミナーでやった内容なのですんなりできました。
復習にもなりました!!


201 : 有家 健司さんのコメント (2012-10-14 00:00:00)

横長になりすぎるのを回避するため、1つめのマクロは変数を宣言しすぎた感じがしますが・・・

[1][2][3]は sub act1()です。
Sub act1()
Dim cnt
For cnt = 2 To 51
Dim siku
Dim rosen
Dim ku
Dim sen
Dim toho
siku = Range(C & cnt).Value
rosen = Range(E & cnt).Value
ku = InStr(siku, 区)
sen = InStr(rosen, 線)
toho = InStr(rosen, 歩)
Range(F & cnt).Value = Left(siku, ku)
Range(G & cnt).Value = Mid(siku, ku + 1)
Range(H & cnt).Value = Left(rosen, sen)
Range(I & cnt).Value = Mid(rosen, sen + 1, toho - sen - 1)
Range(J & cnt).Value = Mid(rosen, toho)
Next
End Sub

[4][5]はSub act2()です。

Sub act2()
Dim cnt
For cnt = 2 To 11
Dim siku
siku = Range(C & cnt).Value
Dim rosen
rosen = Range(E & cnt).Value

If InStr(siku, 市) = 0 Then
Range(F & cnt).Value = Left(siku, InStr(siku, 区))
Range(G & cnt).Value = Mid(siku, InStr(siku, 区) + 1)
Else
Range(F & cnt).Value = Left(siku, InStr(siku, 市))
Range(G & cnt).Value = Mid(siku, InStr(siku, 市) + 1)
End If

If InStr(rosen, ル) = 0 Then
Range(H & cnt).Value = Left(rosen, InStr(rosen, 線))
Range(I & cnt).Value = Mid(rosen, InStr(rosen, 線) + 1)
Else
Range(H & cnt).Value = Left(rosen, InStr(rosen, ル))
Range(I & cnt).Value = Mid(rosen, InStr(rosen, ル) + 1)
End If

Next
Columns(H:H).EntireColumn.AutoFit
End Sub

何とか正常に動作しました。
もっとスマートな方法があったかもしれません。


200 : 大椛輝志さんのコメント (2012-10-13 00:00:00)

問題1,2までは、研修の復習なので問題なし。
この後の問題3以降、
住所に「区」がなくて「市」の場合、
路線に「駅」がない場合の解答が気になります。
(あと、「市川市=いちかわし」などイレギュラー時)


1259 : 小川慶一の回答 (2012-09-02 23:30:00)

こんにちは。

> gyoは処理の流れから、三番目に置く方が良いと判断が付きますが、
> kuとjusyoの並びは、どちらを先に書く方が見やすいとかあるのでしょうか?

いやー、適当でいいですよ。
極端な言い方をすると、どの変数も、必要になる直前までに
用意されていればいいわけですから。


ということで、

> dim moto
> dim saki
> saki=9
> または
> dim saki
> saki=9
> dim moto
> どちらの方が書き方として良いとかあるのでしょうか?

どちらもokです。


こういうのについて考えるときのこつは、「手順書としてどちらのほうが最適か?」
という問いを持ってながめてみることです。


1258 : 受講生さんのコメント (2012-09-02 22:04:00)

こんばんは、質問があります。
変数の書き方についてです。

新しく変数を置くときに、先生は先に置いた変数の前と後のどちらに書くでしょうか?

基礎コースフォローアップNo.07だとku→jusyo→gyoの順番に変数を設定して
dim jusyo
dim ku
dim gyo
このように解答はなっています。

gyoは処理の流れから、三番目に置く方が良いと判断が付きますが、
kuとjusyoの並びは、どちらを先に書く方が見やすいとかあるのでしょうか?

また基礎コースフォローアップNo.05ではmoto、sakiの二種類出てきます。
dim moto
dim saki
saki=9
または
dim saki
saki=9
dim moto
どちらの方が書き方として良いとかあるのでしょうか?

質問は以上です。
今日は、今まで取り組んだ課題が出来ようになっているか確認する日にしました。


1257 : 小川慶一の回答 (2012-09-02 11:34:00)

> 今回の内容は、セミナーでやった内容だったのでバッチリでした。
> グループワークでホワイトボードに書き出したワークでしたね。
> あの時は全く見当も付かなかったのですが……進歩を感じます。

ですねー。道具の使い方、考え方に慣れてから
改めて同じものを見ると、びっくりするくらいに
自分の進歩を感じるときがあります。


ひきつづき、お楽しみを!


1256 : 受講生さんのコメント (2012-09-01 17:21:00)

今回の内容は、セミナーでやった内容だったのでバッチリでした。

グループワークでホワイトボードに書き出したワークでしたね。

あの時は全く見当も付かなかったのですが……進歩を感じます。


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

本講座の動画一覧

  1. 【動画1】 If文とForNext構文を組み合わせる
    【動画1】 If文とForNext構文を組み合わせる 未習得
  2. 【動画2】 複数条件を組み合わせた条件分岐
    【動画2】 複数条件を組み合わせた条件分岐 未習得
  3. 【動画3】 ElseIfを使った条件分岐
    【動画3】 ElseIfを使った条件分岐 未習得
  4. 【動画4】 出現回数を数える。CountIf関数がやっていることをマクロで書くと?
    【動画4】 出現回数を数える。CountIf関数がやっていることをマクロで書くと? 未習得
  5. 【動画5】 条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。
    【動画5】 条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。 未習得
  6. 【動画6】 条件に一致するデータを別シートに転記する
    【動画6】 条件に一致するデータを別シートに転記する 未習得
  7. 【動画7】 とびとびに存在するデータを拾って加工する
    【動画7】 とびとびに存在するデータを拾って加工する 未習得
  8. 【動画8】 文字列を加工してデータ転記する(その1)
    【動画8】 文字列を加工してデータ転記する(その1) 未習得
  9. 【動画9】 文字列を加工してデータ転記する(その2)
    【動画9】 文字列を加工してデータ転記する(その2) 未習得
  10. 【動画10】 文字列を加工してデータ転記する(その3)
    【動画10】 文字列を加工してデータ転記する(その3) 未習得
  11. 【動画11】 勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?
    【動画11】 勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと? 未習得
  12. 【動画12】 残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ
    【動画12】 残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ 未習得
  13. 【動画13】 複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?
    【動画13】 複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと? 未習得
  14. 【動画14】 文字列を様々に解析して条件分岐
    【動画14】 文字列を様々に解析して条件分岐 未習得
  15. 【動画15】 複数の記号に挟まれた文字列を取り出す
    【動画15】 複数の記号に挟まれた文字列を取り出す 未習得
  16. 【動画16】 各資料ごとに1番からの番号を割り振る。AutoFill機能より便利なマクロ
    【動画16】 各資料ごとに1番からの番号を割り振る。AutoFill機能より便利なマクロ 未習得
  17. 【動画17】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その1)
    【動画17】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その1) 未習得
  18. 【動画18】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)
    【動画18】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その2) 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ