基礎講座第3章7 - 住所情報を分割する(方針を考える)

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

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

解説

サンプルコードで、各種関数を実行してみます。すんなり結果を予想できましたか。結果は、期待通りでしたか。

【この動画で使用する教材ファイル】
 ・Kiso03.xls
 ・kiso_mm_movie.pdf(P9:関数リファレンス)
※講座内で使用する資料は、この個別ページ内でダウンロードできます。

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

8886 : 小川慶一の回答 (2017-09-16 13:23:33)

金子 伊智郎さん:

初見では理由をつかみきれないこともまた出てくるかと思います。
いつでも、自由にご質問&ご相談ください (^^

> 小川様
>
> > 講座をやっていると、英語(英単語)に慣れてない受講生の方も
> > ままいらっしゃいます。
> > そうすると、「adrs」とか表記しても、その趣旨の理解だけで
> > 頭がいっぱいになってしまう方もおり、講座にならなくなって
> > しまうことがあります。
> > なので、ベタでも、講座では、あえて、「jusho」とかいう表記を
> > しています。
>
> 激しく納得しました。
> 変数名から目的を連想できないといけないので何がなんでも英語に
> こだわる必要はないですね。
>
> 特にいろいろな背景の個人が本講座の対象と考えると余計に、ですね。
>
> 引き続きよろしくお願いします。
>
>


8881 : 金子 伊智郎さんのコメント (2017-09-14 18:05:21)

小川様

> 講座をやっていると、英語(英単語)に慣れてない受講生の方も
> ままいらっしゃいます。
> そうすると、「adrs」とか表記しても、その趣旨の理解だけで
> 頭がいっぱいになってしまう方もおり、講座にならなくなって
> しまうことがあります。
> なので、ベタでも、講座では、あえて、「jusho」とかいう表記を
> しています。

激しく納得しました。
変数名から目的を連想できないといけないので何がなんでも英語に
こだわる必要はないですね。

特にいろいろな背景の個人が本講座の対象と考えると余計に、ですね。

引き続きよろしくお願いします。


8873 : 小川慶一の回答 (2017-09-14 10:49:45)

金子 伊智郎さん:

> 個人的に日本語のローマ字読みはmigi, hidari, ue, shita などは好きではないので

お気持ち、よく分かります (^^;

本当は、僕も adrs とかのほうが好みです。

が...。
講座をやっていると、英語(英単語)に慣れてない受講生の方もままいらっしゃいます。
そうすると、「adrs」とか表記しても、その趣旨の理解だけで頭がいっぱいになってしまう方もおり、講座にならなくなってしまうことがあります。
なので、ベタでも、講座では、あえて、「jusho」とかいう表記をしています。

あと、長いプログラムになると、思いつく変数名も枯渇してきます。。
金子さんにも、いずれそういうときに、「もういいや!面倒だからローマ字にしちゃえ!」と思うときもあるかもしれません。僕自身、英語、日本語、それでも足りないときは、スペイン語から単語を借りてきて変数名を作っていたことがあります。

今後の何かの参考まで (^^;


8868 : 金子 伊智郎さんのコメント (2017-09-12 11:49:04)

小川様

回答ありがとうございます!!
励みになります!
確かにVBAの予約語orキーワードを変数名に利用してしまうのはよろしくないですね。
個人的に日本語のローマ字読みはmigi, hidari, ue, shita などは好きではないので 英単語省略adrsなど.. で行こうかなと思います。
丁寧な回答+解説ありがとうございました。


8864 : 小川慶一の回答 (2017-09-12 11:26:09)

金子 伊智郎さん:

> 先生の動画がわかりやすいのでいいペースで進んでいます。

それは、よかった!
ひきつづきお楽しみください☆

いただいたマクロ、ステキです。

以下、変数名についてだけコメント(あとは完璧です v(^^* )。

Dim address のところは、 adrs とかの実在する英単語とは異なるものにしたほうがよいでしょう。

というのは、英単語一語だと、エクセルマクロに実在するキーワードとかぶる可能性か高いため。

たとえば、以下はまずかろうというのはなんとなく感じられるかと思います。

Dim value
Dim end
Dim right


基礎編でも登場したキーワードと同じ変数名ですね。そして、 value はまだギリギリOKですが、 end, right は誤動作します。

そして、実は、(発展編1で扱いますが)以下のとおり、 .address というプロパティが実在します。

Dim moji
moji = Range("A1").Address ' .address プロパティを調べることにより、セルの番地を取得できます。


ということなので、変数名には、実在する英単語はなるべく避けましょう

ではどうするか?ということですが。。
例えば、僕なら以下のようにします↓。

Dim adrs  'address の代わり
Dim atai  'value の代わり
Dim saigo 'end の代わり
Dim migi  'right の代わり


以下も復習されると良いかと。
「基礎講座第1章9 - 変数を活用するときの注意点」
https://online.pc5bai.com/movie/index/25/105


> 私もコードを書いてみました。
> VBAは仕事でも使った経験があるのですが、今回体系的に基礎から学びなおしたいと思い、オンライン講座受講しています。
> 先生の動画がわかりやすいのでいいペースで進んでいます。

Sub address_split()
    Const minGyo = 2
    Const maxGyo = 51
    Dim num
    Dim address
    
    For num = minGyo To maxGyo
'        Range("F" & num).Value = Left(Range("C" & num).Value, InStr(Range("C" & num).Value, "区"))
'        Range("G" & num).Value = Mid(Range("C" & num).Value, InStr(Range("C" & num).Value, "区") + 1)
        
        'Range("C" & num).Value がくどいので変数に格納する
        address = Range("C" & num).Value
        Range("F" & num).Value = Left(address, InStr(address, "区"))
        Range("G" & num).Value = Mid(address, InStr(address, "区") + 1)

    Next num

End Sub


8854 : 金子 伊智郎さんのコメント (2017-09-11 17:29:16)

私もコードを書いてみました。
VBAは仕事でも使った経験があるのですが、今回体系的に基礎から学びなおしたいと思い、オンライン講座受講しています。
先生の動画がわかりやすいのでいいペースで進んでいます。

Sub address_split()
    Const minGyo = 2
    Const maxGyo = 51
    Dim num
    Dim address
    
    For num = minGyo To maxGyo
'        Range("F" & num).Value = Left(Range("C" & num).Value, InStr(Range("C" & num).Value, "区"))
'        Range("G" & num).Value = Mid(Range("C" & num).Value, InStr(Range("C" & num).Value, "区") + 1)
        
        'Range("C" & num).Value がくどいので変数に格納する
        address = Range("C" & num).Value
        Range("F" & num).Value = Left(address, InStr(address, "区"))
        Range("G" & num).Value = Mid(address, InStr(address, "区") + 1)

    Next num

End Sub


8777 : 小川慶一の回答 (2017-08-27 00:54:50)

受講生 さん:

細かいステップを実現することのくり返しです。

> 何が必要なのかを考える。
> 今回は”区”がキーワード
> イメージは、
> ①区を見つけるマクロ
> ②区の前までを表示するマクロ
> ③区の後ろから全てを表示するマクロ を作るイメージ。


8767 : 受講生さんのコメント (2017-08-25 18:20:27)

何が必要なのかを考える。
今回は”区”がキーワード
イメージは、
①区を見つけるマクロ
②区の前までを表示するマクロ
③区の後ろから全てを表示するマクロ を作るイメージ。


8728 : 小川慶一の回答 (2017-08-15 19:14:17)

浦山大さん:

> 自分なりに「自分自身で添削」を行いました。
> 小川先生の仰っておられる意図と違っていたらすみません。

いえいえ。お願いしたかったとおりのことをされていますよ。

> この問いかけを書いたタイミングの理解度だと、
> 「instr関数やleft関数、mid関数で条件を作る」
> →「For Next構文」という箱に入れて回転させる
> というイメージ曖昧で分離して実感できていないですね。
>
> 「小さいものを作る」「箱の中に入れる」「加工する」
> というハナコのステップを練習することで、
> 自然と上記部分の分離がなされてきたように感じます。

手順を観察する力がつくと、見え方が変わりますね。


> フォローアップの練習+
> 皆さんの書かれているコード等を参照させて頂きながら、
> 多様な考え方にあたり、体験していくのが一番早いと感じました。
> 引き出しが少ないように感じております。
> もっと作業回数を増やして気づきを増やします。

まずは、講座で僕が解説したとおりのやり方を身に着けてください。
そのうえでアレンジを見る、という順番が良いかと思います。

学びたての受講生の方が四苦八苦して書いた別解について検討するより、さまざまな事例に対応できるよう、種々の例題に触れたほうが実務での活用までの近道になります。
「引き出し」を増やすにも、それが得策です。

> 添削を通じて、
> 書くことで「過去の思考過程の整理ができた」「これを書けるということは短期間で過去の自分よりも知識が身についている証明である」という感想を持ちました。

v(^^

以下では、(*)の行だけがインデント不正(ひとつ多い)です。
ハナコの練習、徹底しましょう!ハナコが華麗にキマれば、インデント不正はそもそも起こらないはずです。

Sub ku_izen()          '修正1:test→kuizenに改名(使用用途を明確に)
    Dim gyo
    For gyo = 2 To 51
        Dim juusho                              '変数juushoは…
        juusho = Range("C" & gyo)   'C列(gyo(2~51行目))の値を取る
            Range("F" & gyo).Value = Left(juusho, InStr(juusho, "区"))'(*)
    Next
End Sub


8719 : 浦山大さんのコメント (2017-08-15 10:11:35)

小川先生

自分なりに「自分自身で添削」を行いました。
小川先生の仰っておられる意図と違っていたらすみません。

> プログラム表記はこれで上手にいくかな?テスト兼ねて投稿です。

問題なく投稿出来ておりました。
OKです。

>演習に入る前に自分で何も見ないでコードを作成してみました(F列、G列)。
> ここまでの練習で、ForNext構文のイメージが湧きやすかったので、
> ForNext構文にて記載しました。

この問いかけを書いたタイミングの理解度だと、
「instr関数やleft関数、mid関数で条件を作る」
→「For Next構文」という箱に入れて回転させる
というイメージ曖昧で分離して実感できていないですね。

フォローアップに取り組みながら、
「小さいものを作る」「箱の中に入れる」「加工する」
というハナコのステップを練習することで、
自然と上記部分の分離がなされてきたように感じます。

仮に、For Next構文なしでこの関数を記載するとしたら、
行数が非常に多いマクロが完成したはずです…。

> これじゃないパターンで作るとどう作れるのかな?
> と楽しみにしながら動画を拝見していきたいと思います。

フォローアップの練習+
皆さんの書かれているコード等を参照させて頂きながら、
多様な考え方にあたり、体験していくのが一番早いと感じました。
まだまだ練習不足です。
一歩一歩進めていきたいと思います。

以下、コードも記載してみましたが、
こちらはあまり改善らしい改善をしておりません。
引き出しが少ないように感じております。
もっと作業回数を増やして気づきを増やします。

添削を通じて、
書くことで「過去の思考過程の整理ができた」「これを書けるということは短期間で過去の自分よりも知識が身についている証明である」という感想を持ちました。

Sub ku_izen()          '修正1:test→kuizenに改名(使用用途を明確に)
    Dim gyo
    For gyo = 2 To 51
        Dim juusho                              '変数juushoは…
        juusho = Range("C" & gyo)   'C列(gyo(2~51行目))の値を取る
            Range("F" & gyo).Value = Left(juusho, InStr(juusho, "区"))
    Next
End Sub


8703 : 小川慶一の回答 (2017-08-14 00:43:58)

浦山大さん:

ヒントらしいヒントなしでここまでできたのは、とてもすばらしいことです v(^^*

以下の投稿に対して、あとの動画をひととおり見たあとで、ご自身で添削を入れてください。
それがいちばん力つきます。
添削をここに載せていただければ、その添削に対して僕がコメントします。

> プログラム表記はこれで上手にいくかな?テスト兼ねて投稿です。
>
> 演習に入る前に自分で何も見ないでコードを作成してみました(F列、G列)。
> ここまでの練習で、ForNext構文のイメージが湧きやすかったので、
> ForNext構文にて記載しました。
>
> これじゃないパターンで作るとどう作れるのかな?
> と楽しみにしながら動画を拝見していきたいと思います。
>
> 他コメントで出てきているみなさんが記載したコードも、
> 自作したあとで拝見させて頂くと「こういう方法もあるのか!」
> ととっても勉強になります。
>
> Excelファイルでテストしたところ、
> 以下2つのコードが思うように動作したことを確認済みです。


8697 : 浦山大さんのコメント (2017-08-13 13:05:15)

プログラム表記はこれで上手にいくかな?テスト兼ねて投稿です。

演習に入る前に自分で何も見ないでコードを作成してみました(F列、G列)。
ここまでの練習で、ForNext構文のイメージが湧きやすかったので、
ForNext構文にて記載しました。

これじゃないパターンで作るとどう作れるのかな?
と楽しみにしながら動画を拝見していきたいと思います。

他コメントで出てきているみなさんが記載したコードも、
自作したあとで拝見させて頂くと「こういう方法もあるのか!」
ととっても勉強になります。

Excelファイルでテストしたところ、
以下2つのコードが思うように動作したことを確認済みです。

Sub test()
    Dim gyo
    For gyo = 2 To 51
    Dim juusho
    juusho = Range("C" & gyo)
        Range("F" & gyo).Value = Left(juusho, InStr(juusho, "区"))
    Next
End Sub


↑gyoとjuushoを変数にしました。

Sub choumeiika()
    Dim gyo
    For gyo = 2 To 51
        Range("G" & gyo).Value = Mid(Range("c" & gyo).Value, InStr(Range("c" & gyo), "区") + 1)
    Next
End Sub


↑gyoだけ変数にして、juushoは使いませんでした。
何回も書き直しがあったので纏められた方がいいなと感じました。


7400 : 受講生さんのコメント (2016-12-12 15:07:14)

いよいよ現実的な話になってきてワクワクしています。


6002 : 受講生さんのコメント (2016-03-20 18:09:35)

ここまでの文字列関数の学習をもとに、nextを使って市区名を抜き出す部分マクロを作成してみました。
この先の動画はまだ見ていない段階です。

Sub renshyu004()

Dim jyusyo                  '元となる住所を変数とする
Dim i                        'カウント変数の宣言

    For i = 2 To 20         'カウント数をラスト行までと指定
        jyusyo = Range("c" & i).Value   '元住所をjyusyo変数に格納
        Range("g" & i).Value = Left(jyusyo, InStr(jyusyo, "区"))
                          '住所の先頭文字から、"区"の文字位置までの文字数を取得
    Next i

End Sub

gooska


4928 : 小川慶一の回答 (2015-08-22 17:39:04)

仲村 修治 さん:

よいですね。
そして、積極的にいろいろマクロを書いてためされるのもとても良いと思います。こういうことやると力になりますよね。

以下、ちょこっとだけブラッシュアップ。

Sub saiten_ogawa() '自己採点マクロです
 
    Dim gyo As Long '基礎編では扱いませんが、データ型も宣言。
'    Dim kaito
'    Dim seikai

    Const seikai As String = "A" '基礎編では扱いませんが、変数でなく定数で宣言。
    Const kaito As String = "B"  '基礎編では扱いませんが、変数でなく定数で宣言。
     
    For gyo = 3 To 7
        If Range(seikai & gyo).Value = Range(kaito & gyo).Value Then
            Range(kaito & gyo).Font.Color = vbBlue
            Range(kaito & gyo).Font.Bold = False '不正解だったものが正解に書き換えて再実行したときにこれがないと太字のまま
        Else
            Range(kaito & gyo).Font.Bold = True
            Range(kaito & gyo).Font.Color = vbRed
        End If
    Next
End Sub




>十分な問題数で、繰り返すことで理解が深まりました。
>ちなみに、自己採点用のマクロを作ってみました。
>
>Sub saiten() '自己採点マクロです
>
>    Dim gyo
>    Dim kaito
>    Dim seikai
>    
>    seikai = "A"
>    kaito = "B"
>    
>    For gyo = 3 To 7
>        If Range(seikai & gyo).Value = Range(kaito & gyo).Value Then
>            Range(kaito & gyo).Font.Color = vbBlue
>        Else
>            Range(kaito & gyo).Font.Bold = True
>            Range(kaito & gyo).Font.Color = vbRed
>        End If
>    Next
>End Sub
>


4926 : 仲村 修治さんのコメント (2015-08-22 10:20:06)

十分な問題数で、繰り返すことで理解が深まりました。
ちなみに、自己採点用のマクロを作ってみました。

Sub saiten() '自己採点マクロです

    Dim gyo
    Dim kaito
    Dim seikai
    
    seikai = "A"
    kaito = "B"
    
    For gyo = 3 To 7
        If Range(seikai & gyo).Value = Range(kaito & gyo).Value Then
            Range(kaito & gyo).Font.Color = vbBlue
        Else
            Range(kaito & gyo).Font.Bold = True
            Range(kaito & gyo).Font.Color = vbRed
        End If
    Next
End Sub


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

本講座の動画一覧

  1. 【動画1】 基礎講座第1章1 - マクロの入ったファイルを開くときの注意点
    【動画1】 基礎講座第1章1 - マクロの入ったファイルを開くときの注意点 未習得
  2. 【動画2】 基礎講座第1章2 - オブジェクトの指定
    【動画2】 基礎講座第1章2 - オブジェクトの指定 未習得
  3. 【動画3】 基礎講座第1章3 - 色の指定
    【動画3】 基礎講座第1章3 - 色の指定 未習得
  4. 【動画4】 基礎講座第1章4 - コメントの活用
    【動画4】 基礎講座第1章4 - コメントの活用 未習得
  5. 【動画5】 基礎講座第1章5 - 算術演算子
    【動画5】 基礎講座第1章5 - 算術演算子 未習得
  6. 【動画6】 基礎講座第1章6 - 手書きする演習
    【動画6】 基礎講座第1章6 - 手書きする演習 未習得
  7. 【動画7】 基礎講座第1章7 - ワークシート関数との挙動の違い
    【動画7】 基礎講座第1章7 - ワークシート関数との挙動の違い 未習得
  8. 【動画8】 基礎講座第1章8 - 変数を使ったプログラム、変数を使う意義
    【動画8】 基礎講座第1章8 - 変数を使ったプログラム、変数を使う意義 未習得
  9. 【動画9】 基礎講座第1章9 - 変数を活用するときの注意点
    【動画9】 基礎講座第1章9 - 変数を活用するときの注意点 未習得
  10. 【動画10】 基礎講座第1章10 - 自動データヒント機能
    【動画10】 基礎講座第1章10 - 自動データヒント機能 未習得
  11. 【動画11】 基礎講座第1章11 - テストの方法
    【動画11】 基礎講座第1章11 - テストの方法 未習得
  12. 【動画12】 基礎講座第1章12 - ドリル
    【動画12】 基礎講座第1章12 - ドリル 未習得
  13. 【動画13】 基礎講座第2章1 - 第2章の概要
    【動画13】 基礎講座第2章1 - 第2章の概要 未習得
  14. 【動画14】 基礎講座第2章2 - 文字列とは
    【動画14】 基礎講座第2章2 - 文字列とは 未習得
  15. 【動画15】 基礎講座第2章3 - 文字列操作の基本
    【動画15】 基礎講座第2章3 - 文字列操作の基本 未習得
  16. 【動画16】 基礎講座第2章4 - セルの書式と、値の投入
    【動画16】 基礎講座第2章4 - セルの書式と、値の投入 未習得
  17. 【動画17】 基礎講座第2章5 - 文字列の結合
    【動画17】 基礎講座第2章5 - 文字列の結合 未習得
  18. 【動画18】 基礎講座第2章6 - セルやシートの指定に使われる文字列
    【動画18】 基礎講座第2章6 - セルやシートの指定に使われる文字列 未習得
  19. 【動画19】 基礎講座第2章7 - 日付の扱い
    【動画19】 基礎講座第2章7 - 日付の扱い 未習得
  20. 【動画20】 基礎講座第2章8 - ドリル1
    【動画20】 基礎講座第2章8 - ドリル1 未習得
  21. 【動画21】 基礎講座第2章9 - ドリル2
    【動画21】 基礎講座第2章9 - ドリル2 未習得
  22. 【動画22】 基礎講座第2章10 - ドリル3
    【動画22】 基礎講座第2章10 - ドリル3 未習得
  23. 【動画23】 基礎講座第2章11 - ドリル4
    【動画23】 基礎講座第2章11 - ドリル4 未習得
  24. 【動画24】 基礎講座第2章12 - ドリル5
    【動画24】 基礎講座第2章12 - ドリル5 未習得
  25. 【動画25】 基礎講座第3章1 - マクロを書く人のためのキーボード操作
    【動画25】 基礎講座第3章1 - マクロを書く人のためのキーボード操作 未習得
  26. 【動画26】 基礎講座第3章2 - マクロを書く人のためのショートカットキー操作
    【動画26】 基礎講座第3章2 - マクロを書く人のためのショートカットキー操作 未習得
  27. 【動画27】 基礎講座第3章3 - Left関数、Mid関数、Right関数
    【動画27】 基礎講座第3章3 - Left関数、Mid関数、Right関数 未習得
  28. 【動画28】 基礎講座第3章4 - Len関数、Instr関数
    【動画28】 基礎講座第3章4 - Len関数、Instr関数 未習得
  29. 【動画29】 基礎講座第3章5 - 手書きドリル1(関数の練習)
    【動画29】 基礎講座第3章5 - 手書きドリル1(関数の練習) 未習得
  30. 【動画30】 基礎講座第3章6 - 手書きドリル2(関数の練習)
    【動画30】 基礎講座第3章6 - 手書きドリル2(関数の練習) 未習得
  31. 【動画31】 基礎講座第3章7 - 住所情報を分割する(方針を考える)
    【動画31】 基礎講座第3章7 - 住所情報を分割する(方針を考える) 未習得
  32. 【動画32】 基礎講座第3章8 - 住所情報を分割する(方針の説明)
    【動画32】 基礎講座第3章8 - 住所情報を分割する(方針の説明) 未習得
  33. 【動画33】 基礎講座第3章9 - 住所情報を分割する(実習)
    【動画33】 基礎講座第3章9 - 住所情報を分割する(実習) 未習得
  34. 【動画34】 基礎講座第3章10 - プログラミング実習のまとめ
    【動画34】 基礎講座第3章10 - プログラミング実習のまとめ 未習得
  35. 【動画35】 基礎講座第4章1 - 第4章の概要
    【動画35】 基礎講座第4章1 - 第4章の概要 未習得
  36. 【動画36】 基礎講座第4章2 - ハナコのステップ
    【動画36】 基礎講座第4章2 - ハナコのステップ 未習得
  37. 【動画37】 基礎講座第4章3 - 「For Next構文」を覚える
    【動画37】 基礎講座第4章3 - 「For Next構文」を覚える 未習得
  38. 【動画38】 基礎講座第4章4 - 「For Next構文」の実習
    【動画38】 基礎講座第4章4 - 「For Next構文」の実習 未習得
  39. 【動画39】 基礎講座第4章5 - 「ハナコのステップ」のふりかえり
    【動画39】 基礎講座第4章5 - 「ハナコのステップ」のふりかえり 未習得
  40. 【動画40】 基礎講座第4章6 - If文
    【動画40】 基礎講座第4章6 - If文 未習得
  41. 【動画41】 基礎講座第4章7 - 「If文」の実習
    【動画41】 基礎講座第4章7 - 「If文」の実習 未習得
  42. 【動画42】 基礎講座第4章8 - 比較の条件設定バリエーション
    【動画42】 基礎講座第4章8 - 比較の条件設定バリエーション 未習得
  43. 【動画43】 基礎講座第4章9 - If文のその他の構文その1
    【動画43】 基礎講座第4章9 - If文のその他の構文その1 未習得
  44. 【動画44】 基礎講座第4章10 - If文のその他の構文その2
    【動画44】 基礎講座第4章10 - If文のその他の構文その2 未習得
  45. 【動画45】 補講:複数ファイル間でのデータ転記
    【動画45】 補講:複数ファイル間でのデータ転記 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ