
【この動画で使用する教材ファイル】
・Kiso03.xls
・kiso_mm_movie.pdf(P9:関数リファレンス)
※講座内で使用する資料は、この個別ページ内でダウンロードできます。
この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。
このページへの投稿/コメント
動画の視聴を進めていく毎に少しづつわかることや気付くことがあって楽しく学習させていただいてます!
また、コードの埋め込みも試しにやってみたかったのでここで試させていただければと思います!
Sub jyuusyo()
Dim ku
Dim i
For i = 2 To 51
ku = InStr(Range("C" & i).Value, "区") '区の文字の場所を探す
Range("f" & i).Value = Left(Range("C" & i).Value, ku)
Range("g" & i).Value = Mid(Range("C" & i).Value, ku + 1, 20)
Next
End Sub
第4章で、手を使った練習を実際にやります。楽しんでください!
> 講座をやっていると、英語(英単語)に慣れてない受講生の方も
> ままいらっしゃいます。
> そうすると、「adrs」とか表記しても、その趣旨の理解だけで
> 頭がいっぱいになってしまう方もおり、講座にならなくなって
> しまうことがあります。
> なので、ベタでも、講座では、あえて、「jusho」とかいう表記を
> しています。
激しく納得しました。
変数名から目的を連想できないといけないので何がなんでも英語に
こだわる必要はないですね。
特にいろいろな背景の個人が本講座の対象と考えると余計に、ですね。
引き続きよろしくお願いします。
初見では理由をつかみきれないこともまた出てくるかと思います。
いつでも、自由にご質問&ご相談ください (^^
> 小川様
>
> > 講座をやっていると、英語(英単語)に慣れてない受講生の方も
> > ままいらっしゃいます。
> > そうすると、「adrs」とか表記しても、その趣旨の理解だけで
> > 頭がいっぱいになってしまう方もおり、講座にならなくなって
> > しまうことがあります。
> > なので、ベタでも、講座では、あえて、「jusho」とかいう表記を
> > しています。
>
> 激しく納得しました。
> 変数名から目的を連想できないといけないので何がなんでも英語に
> こだわる必要はないですね。
>
> 特にいろいろな背景の個人が本講座の対象と考えると余計に、ですね。
>
> 引き続きよろしくお願いします。
>
>
回答ありがとうございます!!
励みになります!
確かにVBAの予約語orキーワードを変数名に利用してしまうのはよろしくないですね。
個人的に日本語のローマ字読みはmigi, hidari, ue, shita などは好きではないので 英単語省略adrsなど.. で行こうかなと思います。
丁寧な回答+解説ありがとうございました。
> 個人的に日本語のローマ字読みはmigi, hidari, ue, shita などは好きではないので
お気持ち、よく分かります (^^;
本当は、僕も adrs とかのほうが好みです。
が...。
講座をやっていると、英語(英単語)に慣れてない受講生の方もままいらっしゃいます。
そうすると、「adrs」とか表記しても、その趣旨の理解だけで頭がいっぱいになってしまう方もおり、講座にならなくなってしまうことがあります。
なので、ベタでも、講座では、あえて、「jusho」とかいう表記をしています。
あと、長いプログラムになると、思いつく変数名も枯渇してきます。。
金子さんにも、いずれそういうときに、「もういいや!面倒だからローマ字にしちゃえ!」と思うときもあるかもしれません。僕自身、英語、日本語、それでも足りないときは、スペイン語から単語を借りてきて変数名を作っていたことがあります。
今後の何かの参考まで (^^;
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
> 先生の動画がわかりやすいのでいいペースで進んでいます。
それは、よかった!
ひきつづきお楽しみください☆
いただいたマクロ、ステキです。
以下、変数名についてだけコメント(あとは完璧です 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://forum.pc5bai.com/lesson/page/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
今回は”区”がキーワード
イメージは、
①区を見つけるマクロ
②区の前までを表示するマクロ
③区の後ろから全てを表示するマクロ を作るイメージ。
細かいステップを実現することのくり返しです。
> 何が必要なのかを考える。
> 今回は”区”がキーワード
> イメージは、
> ①区を見つけるマクロ
> ②区の前までを表示するマクロ
> ③区の後ろから全てを表示するマクロ を作るイメージ。
自分なりに「自分自身で添削」を行いました。
小川先生の仰っておられる意図と違っていたらすみません。
> プログラム表記はこれで上手にいくかな?テスト兼ねて投稿です。
問題なく投稿出来ておりました。
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
> 自分なりに「自分自身で添削」を行いました。
> 小川先生の仰っておられる意図と違っていたらすみません。
いえいえ。お願いしたかったとおりのことをされていますよ。
> この問いかけを書いたタイミングの理解度だと、
> 「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
演習に入る前に自分で何も見ないでコードを作成してみました(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は使いませんでした。
何回も書き直しがあったので纏められた方がいいなと感じました。
ヒントらしいヒントなしでここまでできたのは、とてもすばらしいことです v(^^*
以下の投稿に対して、あとの動画をひととおり見たあとで、ご自身で添削を入れてください。
それがいちばん力つきます。
添削をここに載せていただければ、その添削に対して僕がコメントします。
> プログラム表記はこれで上手にいくかな?テスト兼ねて投稿です。
>
> 演習に入る前に自分で何も見ないでコードを作成してみました(F列、G列)。
> ここまでの練習で、ForNext構文のイメージが湧きやすかったので、
> ForNext構文にて記載しました。
>
> これじゃないパターンで作るとどう作れるのかな?
> と楽しみにしながら動画を拝見していきたいと思います。
>
> 他コメントで出てきているみなさんが記載したコードも、
> 自作したあとで拝見させて頂くと「こういう方法もあるのか!」
> ととっても勉強になります。
>
> Excelファイルでテストしたところ、
> 以下2つのコードが思うように動作したことを確認済みです。
この先の動画はまだ見ていない段階です。
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
ちなみに、自己採点用のマクロを作ってみました。
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
よいですね。
そして、積極的にいろいろマクロを書いてためされるのもとても良いと思います。こういうことやると力になりますよね。
以下、ちょこっとだけブラッシュアップ。
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
>
学習記録としてメモを残す
※メモを残すにはこの講座の利用権限が必要です。