3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

文字列操作は慎重に! ヾ(´ー`)ノ

2011年11月26日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルマクロ・VBA達人養成塾 小川です。

キューバ旅行記、その39です。

ハバナでの、2日目の午後5時すぎ。

エクセルマクロ達人養成塾塾長ブログ-そこかしこのカフェでこんな感じ。ハバナらしい。
そこかしこのカフェでこんな感じ。ハバナらしい。

エクセルマクロ達人養成塾塾長ブログ-拡大してみた。
拡大してみた。

エクセルマクロ達人養成塾塾長ブログ-もう一度、引いてみた。
もう一度、引いてみた。

エクセルマクロ達人養成塾塾長ブログ-掃除のボランティアと思しき人々。
掃除のボランティアと思しき人々。

エクセルマクロ達人養成塾塾長ブログ-この写真では見えないが、メディアも集まっていた。
この写真では見えないが、メディアも集まっていた。

目抜き通りに戻ってきた。Parque Centralのすぐそば。右手に見える青い建物が、Hotel Telegrafo。その横の荘厳な感じの建物は、 Hotel Ingraterra。
どちらかで、日本円を両替した。

エクセルマクロ達人養成塾塾長ブログ-そろそろ宿に戻るか、と歩き出す。
そろそろ宿に戻るか、と歩き出す。ちなみに、泊まっていた Casa Particular は、革命広場「Plaza de la Revolucion」の近く。
郊外にあって、Loney Planetの地図で見ると、歩くと最短でも1時間くらいかかりそうな距離。フツーの日本人が歩く距離ではないです。
なのだが、ここまでの感触としてはかなり治安良いし、途中、ハバナの中華街を抜けるルートだということ、もっと市民の生活ぽいものを感じてみたいということで、歩くことにした。

エクセルマクロ達人養成塾塾長ブログ-右手に見えるホテルに、やはり楽団。
右手に見えるホテルに、やはり楽団。

エクセルマクロ達人養成塾塾長ブログ-と、左手にスタジアムが。人がどんどん入っていく。
と、左手にスタジアムが。人がどんどん入っていく。

エクセルマクロ達人養成塾塾長ブログ-入場料を払って僕も入ってみると
入場料を払って僕も入ってみると…。

エクセルマクロ達人養成塾塾長ブログ-フットサルの国際試合だった。
フットサルの国際試合だった。

エクセルマクロ達人養成塾塾長ブログ-キューバ対コスタリカ。
キューバ対コスタリカ。出場している選手があまりにも若く見えるので最初高校生チーム同士の試合かと思っていたのだが、近くにいた人に聞いてみると、正式な代表チームだ、とのことだった。
ちょっと意外に感じた。

エクセルマクロ達人養成塾塾長ブログ-目抜き通りに戻ってきた。
2ndハーフの途中から観て、3rdハーフの途中に席を立ったのだが。
元公認審判員の僕の目から見る限り、判定はかなりキューバよりであった。

ちなみに、後で聞いた話によると、試合は引き分けに終わったとのこと。

エクセルマクロ達人養成塾塾長ブログ-カピトリオの前を通り
カピトリオの前を通り

エクセルマクロ達人養成塾塾長ブログ-Parque de la Fratenidadの前を通る。
Parque de la Fratenidadの前を通る。

エクセルマクロ達人養成塾塾長ブログ-例によって、こんな風景。
例によって、こんな風景。

..ということで。

昨日の更新で写真をたくさんアップすると一気に時間を進められるということに気がついたので、今日も、10枚アップしてみました。

塾長のキューバ旅行記、最初から読みたい方はこちらから


文字列操作は、慎重に!

今日は、受講生から最近いただいた質問をネタに。

達人養成塾の講座を受講してかなりデキるようになった人から。

とはいえ、かなりデキるようになってもやりがちな問題をひとつ紹介。

先生こんにちは。

今回の問題をオブジェクト型の変数で解決したいと思って、試行錯誤しました。
(発展編の課題なので、発展編の方法でと思ってやってみました。)

ku_research5_1の方法で、オブジェクトのコレクションが決められなかったので、ku_research5_2でcellを使ってやってみたらできました。

もし、ku_research5_1に近い書き方でうまい方法があればご指導お願いします。
楽しくやっています。よろしくお願いします。

Sub ku_research5_1()
    Dim rRange As Range
    Dim c_ku As Long
    Dim cMax As Long
    cMax = Range(“B65536”).End(xlUp).Row
    For Each rRange In Range(“C2 : C & cMax”)
‘        For Each rRange In Range(“C2 : C210”) ←これができて、一つ上の行ができないです。
‘        Range(“C2 : C & cMax”)のようなコレクションの表記はできないのでしょうか。
        c_ku = InStr(rRange.Value, “区”)
        rRange.Offset(, 4).Value = Left(rRange, c_ku)
        rRange.Offset(, 5).Value = Mid(rRange, c_ku + 1)
    Next
End Sub
Sub ku_research5_2()
    Dim rRange As Range
    Dim c_ku As Long
    Dim cMax As Long
    cMax = Range(“B65536”).End(xlUp).Row
    For Each rRange In Range(Cells(2, 3), Cells(cMax, 3))
        ‘「VBA range コレクション」 でググったら上記の表記っぽいのがあったので真似してみました。
        c_ku = InStr(rRange.Value, “区”)
        rRange.Offset(, 4).Value = Left(rRange, c_ku)
        rRange.Offset(, 5).Value = Mid(rRange, c_ku + 1)
Next
End Sub

問題となっている箇所だけを抽出してみると、要するに、こういうこと。

Sub SampleOK()
    Dim rRange As Range
    For Each rRange In Range(“C2 : C210”)
        rRange.Select
    Next
End Sub
Sub SampleNG()
    Dim rRange As Range
    Dim cMax As Long
    cMax = Range(“B65536”).End(xlUp).Row
    For Each rRange In Range(“C2 : C & cMax”) ‘[1]ここで止まる。
        rRange.Select
    Next
End Sub>

で、対処だが。

先に結論を書くと、[1]の部分は、以下の[2]のように書けば良かった。

Sub SampleNG_Shuseisumi()
    Dim rRange As Range
    Dim cMax As Long
    cMax = Range(“B65536”).End(xlUp).Row
    For Each rRange In Range(“C2 : C” & cMax) ‘[2]
        rRange.Select
    Next
End Sub

..と言われてすぐ分かるくらいなら世話はないので。

少し、手順を踏んで解説。

まず大前提として、文字列は、”ダブルクオーテーション”でくくる、という決まりがある。

そして、文字列は、文字列結合演算子「&」で結合できる。

つまり、乱暴の言い方をすれば、以下の2つは、同じ文字列「C2」と見なしてよい。

“C2”
“C” & “2”

ところが、以下は、”C2″ではない。これは、「シー、スペース、アンド、スペース、2」という、長さ5の文字列。

“C & 2”

変数が絡むと、初心者は混乱しがち。以下も間違い。

Dim cMax As Long
cMax = 2
“C & cMax”

ということ。

こういうしくじり方をする人は、

Range(“C2 : C210”)

Range(“C2 : C” & cMax)

にしたいといったときには、

まずは、

Range(“C2 : C” & 210)

というものを作り、それから、

Range(“C2 : C” & cMax)

にすること。

初心者のうちから複数のステップにまたがる作業(文字列を分割し、さらに、変数をはめ込む)を一度に頭の中だけで済ましてしまおうとするから間違える。
こんなことでしょっちゅうひっかかっていると、実務で使い物にならない。

かけ算九九も覚つかない小学生に

3 + 5 * 2 – 27 / 3

なんて計算を暗算でさせてもポカで間違えてしまう可能性大なのと同じことだ。
(まして、こんな計算もできない小学生が文章題を解ける分けなさそうでしょ)

いつも引用しているが、初心者がVBAでプログラムを書くために必要なのは、

Nothing is particularly hard if you divide it into small jobs.

というヘンリー・フォードの言葉に表される姿勢。

これを押し通していけば、最終的には問題を早く解決することができ、先に進むのも早くなる。

ググらないでも先に進めるし、人に聞いて回答を待っている間仕事が進まないというストレスを抱えないでも先に進めるのである ヾ(´ー`)ノ

文字列操作は、慎重に! ヾ(´ー`)ノ

キーワード

コメント

2 thoughts on “文字列操作は慎重に! ヾ(´ー`)ノ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド