Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2010)
文字列にある空白(最初の一つ目の)以降の文字列を隣のセルに区切る
投稿日時: 20/06/09 16:36:59
投稿者: Mapleleaf

皆様お世話になります。
 
エクセル表で
A1からA22までのセル内の文字列にある最初の空白以降の文字列(二個目の空白も含む)を隣のB1からB22
に区切るコードに挑戦しておりますが初心者でなかなかうまくいきません。
 
A1 B1
ABCE EFGH IJLK
実行

A1 B1
ABCD EFGH IJLK
↓ ↓
A22 B22
 
同様にできれば今作成してる表がより、旨くいくのですが、早くも行き詰まって
おります。。。
 
サンプルコードらしきのを探したのですがなかなかうまくいきません。
御手数ですが、もし宜しかったらご教示いただければ幸いです。

回答
投稿日時: 20/06/09 16:48:05
投稿者: WinArrow
投稿者のウェブサイトに移動

コードの作成依頼は、ご遠慮願います。
  
「データ」タブの中に「区切り位置」というボタンがあります。
  
対象セルを選択しておいて、このボタンをクリックしてみてください。
3つの代仰ぐが表示されます。
 
区切り文字に「スペース」を指定すれば、多分、できると思います。

回答
投稿日時: 20/06/09 16:49:25
投稿者: sk

引用:
A1からA22までのセル内の文字列にある最初の空白以降の文字列
(二個目の空白も含む)を隣のB1からB22に区切るコード

引用:
A1 B1
ABCE EFGH IJLK

 
・A 列の各セルには "ABCE EFGH IJLK" のように
 「半角スペースで区切られた文字列」が格納されている。
 
・コードを実行する前の状態において、B 列のセルは全て空白セルである。
 
・各行の A 列のセルの値を、最初の半角スペースを区切り文字として
 2 つの文字列に分割し( 3 つ以上に分割したいわけではない)、
 左側の文字列("ABCE")を A 列のセルに、
 右側の文字列("EFGH IJLK")を B 列のセルに格納したい。
 
ということでしょうか。

投稿日時: 20/06/09 19:08:13
投稿者: Mapleleaf

WinArrow さんの引用:
コードの作成依頼は、ご遠慮願います。
  
「データ」タブの中に「区切り位置」というボタンがあります。
  
対象セルを選択しておいて、このボタンをクリックしてみてください。
3つの代仰ぐが表示されます。
 
区切り文字に「スペース」を指定すれば、多分、できると思います。

 
WinArrow 様
有難うございます。仰る通り区切り位置でためしたのですが、分割する際に
スペースが全部反映されて、Aセルの文字列にある最初の空白以降の文字列は
空白があってもBセルに納めたいのですが、Aセルの文字列に空白が三つあれば
A/B/C/Dのセルに区切られてしまいます。関数でBセルに関数で対処できるのですが
Bセルに関数いれない方法を探して、コードしかないのかなと思った次第です。

投稿日時: 20/06/09 19:18:53
投稿者: Mapleleaf

sk さんの引用:
引用:
A1からA22までのセル内の文字列にある最初の空白以降の文字列
(二個目の空白も含む)を隣のB1からB22に区切るコード

引用:
A1 B1
ABCE EFGH IJLK

 
・A 列の各セルには "ABCE EFGH IJLK" のように
 「半角スペースで区切られた文字列」が格納されている。
 
・コードを実行する前の状態において、B 列のセルは全て空白セルである。
 
・各行の A 列のセルの値を、最初の半角スペースを区切り文字として
 2 つの文字列に分割し( 3 つ以上に分割したいわけではない)、
 左側の文字列("ABCE")を A 列のセルに、
 右側の文字列("EFGH IJLK")を B 列のセルに格納したい。
 
ということでしょうか。

 
sk様
 
有難うございます。
 
・A 列の各セルには "ABCE EFGH IJLK" のように
 「半角スペースで区切られた文字列」が格納されている。
 
  はいその通りでございます。外国人の名前で最初の空白後の文字列は空白無視してBセルに反映
 させたいと思っております。
 
・コードを実行する前の状態において、B 列のセルは全て空白セルである。
 
 はい、B列のセルは全て空白でございます。
 
・各行の A 列のセルの値を、最初の半角スペースを区切り文字として
 2 つの文字列に分割し( 3 つ以上に分割したいわけではない)、
 左側の文字列("ABCE")を A 列のセルに、
 右側の文字列("EFGH IJLK")を B 列のセルに格納したい。
 
 はい、その通りでごあじます。Aセルには文字列(最初の空白のみにして)、Bセルに残り文字列を
 半角スペースがあっても無くてもそのまま格納させたいと思っております。
 
 データの区切りでできれば良かったのですが、半角空白が1つの場合はいいのですが、二つあると
  A/B/Cに分割されて、そこで止まっておりました。
 
 
 それでコードに頼るしかないのかなと思った次第です。
 
 
 

回答
投稿日時: 20/06/09 20:38:24
投稿者: simple

横から失礼します。
 
Split関数にはlimit引数というのがあります。
最大何個までに分割するか、という意味です。

Sub test()
    Dim s As String
    s = "abc def ghi"
    Debug.Print Split(s, " ", 2)(1)
End Sub

とすると、"def ghi"がイミディエイトウインドウに出力されます。
これを使ったらどうでしょう。
 
ちなみに、スペース区切りがデフォルトなので、
Split(s, limit:=2)
などとも書けます。
要素が2個の配列が返ります。
 
# 折角確認いただいていたのに横入りは失礼かと思い、いったん消しましたが、
# 相応の時間が経過したのでよいかな、と思い再投稿します。
 
各行ごとに繰り返し処理をするのが素直だと思います。
なお、
Instrで空白の位置を調べ、LeftとMidで第一要素、第二要素以下を取得しても
同じことができると思います。

投稿日時: 20/06/10 09:18:00
投稿者: Mapleleaf

simple さんの引用:
横から失礼します。
 
Split関数にはlimit引数というのがあります。
最大何個までに分割するか、という意味です。
Sub test()
    Dim s As String
    s = "abc def ghi"
    Debug.Print Split(s, " ", 2)(1)
End Sub

とすると、"def ghi"がイミディエイトウインドウに出力されます。
これを使ったらどうでしょう。
 
ちなみに、スペース区切りがデフォルトなので、
Split(s, limit:=2)
などとも書けます。
要素が2個の配列が返ります。
 
# 折角確認いただいていたのに横入りは失礼かと思い、いったん消しましたが、
# 相応の時間が経過したのでよいかな、と思い再投稿します。
 
各行ごとに繰り返し処理をするのが素直だと思います。
なお、
Instrで空白の位置を調べ、LeftとMidで第一要素、第二要素以下を取得しても
同じことができると思います。

 
simple様
 
有難うございます。丁寧にご教示いただき感謝致します。
本日夜にまたご教示いただいた事やってみます。
*最初の質問内容が漠然としてたのまもしれません。
リストは平均25名くらいで外国人の名前(FIRST NAME MIDDLLE NAME LAST NAME の半角スペース入でA列のセルに入力されたものとB列のセルにFIRST NAME 以降の MIDDLE NAME と LAST NAMEを分割するのをやりたいところでした。データの区切りにしたら、MIDDLE NAMEがない人はAとBに素直にわかれるのですが、FIRST/MIDDLE/LAST の三つがあると半角スペースが反映されてA/B/C列になりました。
 
リスト表A列(例1から30)のNAMAEのFIRST NAME(文字列の最初の半角スペース) 以降はB列に反映
させる。
 
そんな感じのコードができればなというのがきっかけです。
 
 

回答
投稿日時: 20/06/10 09:23:41
投稿者: sk

Mapleleaf さんの引用:
外国人の名前で最初の空白後の文字列は空白無視して
Bセルに反映させたいと思っております。

Mapleleaf さんの引用:
B列のセルは全て空白でございます。

Mapleleaf さんの引用:
Aセルには文字列(最初の空白のみにして)、Bセルに残り文字列を
半角スペースがあっても無くてもそのまま格納させたいと思っております。

Mapleleaf さんの引用:
それでコードに頼るしかないのかなと思った次第です。

あくまで「ファーストネーム」と「ミドルネーム以降の文字列」に
分割することが目的であり、同じ行でさえあればどの列に出力しても
構わない(例えば B 列と C 列でもよい)ということであれば、
マクロを使うまでもなく、数式による分割は可能です。
 
( B1 セル)
--------------------------------------------------------
 
=IF(ISERROR(FIND(" ",A1)),A1,LEFT(A1,FIND(" ",A1)-1))
 
--------------------------------------------------------
 
( C1 セル)
--------------------------------------------------------
 
=IF(ISERROR(FIND(" ",A1)),"",MID(A1,FIND(" ",A1)+1,255))
 
--------------------------------------------------------
 
原理的には simple さんが挙げられた仕組みとほぼ同じです。
 
simple さんの引用:
Instrで空白の位置を調べ、LeftとMidで第一要素、第二要素以下を取得しても
同じことができると思います。

あとはセル範囲 B1:C1 の数式を、オートフィル機能によって
22 行目までコピーなさればよいでしょう。
 
どうして A 列と B 列じゃないと駄目な(かつ自動化しなければならない)
理由があるのであれば、simple さんが示されたようなコードによって
各行の A 列と B 列の値を書き換えることになります。

回答
投稿日時: 20/06/10 09:41:52
投稿者: WinArrow
投稿者のウェブサイトに移動

A列セルを分割の第1番目の文字列をする場合は、「区切り位置」が最も簡単ですが、
数式で対応吸う場合は、A列セルは、そのままになってしまいます。
 
VBAで対する場合の参考コードを掲示します。
 
Sub test()
Dim data As sting
    With Range("A2")
        data = .Value
        If InStr(data, " ") > 0 Then
            .Value = Left$(data, InStr(data, " ") - 1)
            .Offset(, 1).Value = Mid$(data, InStr(data, " ") + 1)
        End If
    End With
End Sub
 
 
※スペースは半角スペースを想定しています。
※分割後の文字列が、日付形式に認識されるような場合は、
事前に表示形式の設定が必要です。
 

回答
投稿日時: 20/06/10 21:49:51
投稿者: simple

> *最初の質問内容が漠然としてたのまもしれません。
内容は把握しているつもりですよ。
>本日夜にまたご教示いただいた事やってみます。
そう思いまして、コードを直接書くことは控えました。
 
材料は皆さんからも提示されていますので、
繰り返し処理のなかで、それらを使えばよいと思います。
 
詰まったら、不明点を明確にして、途中のコードとともにまた質問してください。
頑張って下さい。

投稿日時: 20/06/13 16:00:57
投稿者: Mapleleaf

sk さんの引用:
Mapleleaf さんの引用:
外国人の名前で最初の空白後の文字列は空白無視して
Bセルに反映させたいと思っております。

Mapleleaf さんの引用:
B列のセルは全て空白でございます。

Mapleleaf さんの引用:
Aセルには文字列(最初の空白のみにして)、Bセルに残り文字列を
半角スペースがあっても無くてもそのまま格納させたいと思っております。

Mapleleaf さんの引用:
それでコードに頼るしかないのかなと思った次第です。

あくまで「ファーストネーム」と「ミドルネーム以降の文字列」に
分割することが目的であり、同じ行でさえあればどの列に出力しても
構わない(例えば B 列と C 列でもよい)ということであれば、
マクロを使うまでもなく、数式による分割は可能です。
 
( B1 セル)
--------------------------------------------------------
 
=IF(ISERROR(FIND(" ",A1)),A1,LEFT(A1,FIND(" ",A1)-1))
 
--------------------------------------------------------
 
( C1 セル)
--------------------------------------------------------
 
=IF(ISERROR(FIND(" ",A1)),"",MID(A1,FIND(" ",A1)+1,255))
 
--------------------------------------------------------
 
原理的には simple さんが挙げられた仕組みとほぼ同じです。
 
simple さんの引用:
Instrで空白の位置を調べ、LeftとMidで第一要素、第二要素以下を取得しても
同じことができると思います。

あとはセル範囲 B1:C1 の数式を、オートフィル機能によって
22 行目までコピーなさればよいでしょう。
 
どうして A 列と B 列じゃないと駄目な(かつ自動化しなければならない)
理由があるのであれば、simple さんが示されたようなコードによって
各行の A 列と B 列の値を書き換えることになります。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
sk様
 
お時間いただき、ご教示いただき感謝しております。関数でもできるんですね!。まずは関数で
トライさせていただきましたら、できました!。
区分されてBとCセルに表示されたものをコピペしてAとB列に形式を値で貼付けるとこをマクロで
したら、関数とマクロ利用でできました。
行政の電子システムに登録する専用リストに貼付ける際に先にエクセルで同じ表を作成して
できあがったのをそのままコピペで行政のシステムリスト画面に貼付ける際に(貼付けるしか不可)
値で貼付けできないので関数が張り付いてしまいます。その為にAとB列にマクロで値で貼付けして
表ができたらそのまま行政のシステム画面の登録リストに貼付けて、しっかり登録ができました。
関数でのアドバイスありがとうございました。エクセルの奥の深さと皆様の知識に凄いなと思う
次第です。勉強してもっと使いこなせるよう頑張りたいです。
 
せっかく皆様が大事な時間使ってご教示いただいたので、コードも早速今やりかかっております。
 
本当にありがとうございます。
 
 

投稿日時: 20/06/13 17:02:31
投稿者: Mapleleaf

WinArrow さんの引用:
A列セルを分割の第1番目の文字列をする場合は、「区切り位置」が最も簡単ですが、
数式で対応吸う場合は、A列セルは、そのままになってしまいます。
 
VBAで対する場合の参考コードを掲示します。
 
Sub test()
Dim data As sting
    With Range("A2")
        data = .Value
        If InStr(data, " ") > 0 Then
            .Value = Left$(data, InStr(data, " ") - 1)
            .Offset(, 1).Value = Mid$(data, InStr(data, " ") + 1)
        End If
    End With
End Sub
 
 
※スペースは半角スペースを想定しています。
※分割後の文字列が、日付形式に認識されるような場合は、
事前に表示形式の設定が必要です。
 

 
WinArrow様
 
参考コードご教示有難うございます。感謝申し上げます。皆様からご教示いただいた事をただ漠然と
やるんじゃなくて、かなりの初心者なので一つ一つ丁寧に理解していきながらやっております。
皆さん質問にすぐに、ぱっと対応できるところ凄いです。

投稿日時: 20/06/13 17:11:30
投稿者: Mapleleaf

simple さんの引用:
> *最初の質問内容が漠然としてたのまもしれません。
内容は把握しているつもりですよ。
>本日夜にまたご教示いただいた事やってみます。
そう思いまして、コードを直接書くことは控えました。
 
材料は皆さんからも提示されていますので、
繰り返し処理のなかで、それらを使えばよいと思います。
 
詰まったら、不明点を明確にして、途中のコードとともにまた質問してください。
頑張って下さい。

 
simple様
 
丁寧にかつ、勉強なるよう自分でも何を意味するのか理解しながら考える力を持つようご教示有難うございます。ウインドウに''abc dfe ghi''
が確かにdfe ghiが区別されて表示されました!。これだけでも嬉しいです。それだけでもヒントになり、そしてそこで、うむうむ。。あーすればこーすればと先にいけそうで頭ぐるぐるしながら、にらめっこしながらやっております。
自分の能力からしたらもう少し時間かかると思うけど、頑張ります。!また報告をいれます。

投稿日時: 20/06/14 12:45:01
投稿者: Mapleleaf

Mapleleaf さんの引用:
WinArrow さんの引用:
A列セルを分割の第1番目の文字列をする場合は、「区切り位置」が最も簡単ですが、
数式で対応吸う場合は、A列セルは、そのままになってしまいます。
 
VBAで対する場合の参考コードを掲示します。
 
Sub test()
Dim data As sting
    With Range("A2")
        data = .Value
        If InStr(data, " ") > 0 Then
            .Value = Left$(data, InStr(data, " ") - 1)
            .Offset(, 1).Value = Mid$(data, InStr(data, " ") + 1)
        End If
    End With
End Sub
 
 
※スペースは半角スペースを想定しています。
※分割後の文字列が、日付形式に認識されるような場合は、
事前に表示形式の設定が必要です。
 

 
WinArrow様
 
参考コードご教示有難うございます。感謝申し上げます。皆様からご教示いただいた事をただ漠然と
やるんじゃなくて、かなりの初心者なので一つ一つ丁寧に理解していきながらやっております。
皆さん質問にすぐに、ぱっと対応できるところ凄いです。

 
WinArrow様
 
追記です。A2に最初の文字列の一個目の空白が残り、1個目の空白後の文字列が空白含めてB2セルに
かえりました。ご教示いただいたコードそのままではありますが、凄い!と思いました。
あとは、範囲を指定して例: A2からA50 (リストの表の指定列全体、又はA2から以降のA列
全体に実行できるようすれば良いのですよね???)。そのコードを組み合わせれば良いとこ
まで理解しました。ただそれが、参考書みたりしながらにらめっこ状態です。
有難うございます。

投稿日時: 20/06/14 13:01:48
投稿者: Mapleleaf

Mapleleaf さんの引用:
simple さんの引用:
> *最初の質問内容が漠然としてたのまもしれません。
内容は把握しているつもりですよ。
>本日夜にまたご教示いただいた事やってみます。
そう思いまして、コードを直接書くことは控えました。
 
材料は皆さんからも提示されていますので、
繰り返し処理のなかで、それらを使えばよいと思います。
 
詰まったら、不明点を明確にして、途中のコードとともにまた質問してください。
頑張って下さい。

 
simple様
 
丁寧にかつ、勉強なるよう自分でも何を意味するのか理解しながら考える力を持つようご教示有難うございます。ウインドウに''abc dfe ghi''
が確かにdfe ghiが区別されて表示されました!。これだけでも嬉しいです。それだけでもヒントになり、そしてそこで、うむうむ。。あーすればこーすればと先にいけそうで頭ぐるぐるしながら、にらめっこしながらやっております。
自分の能力からしたらもう少し時間かかると思うけど、頑張ります。!また報告をいれます。

 
simple 様
 
追記です。
ご教示いただいたコードに加えて別途下記を試しにやってたぶんがあるのですが、例A2からA30までの
セル。
 
Sub trialtest()
Dim i As Long
Dim tmp As Variant
For i = 2 to 30
tmp = Splic(Cells(i. 1), " ")
Cells(i, 1) = tmp(0)
Cells(i, 2) = tmp(1)
 
Next i
End Sub
 

でやったら、A2セルにある文字列"abc def hij "の文字列がA2からA30までは
指定範囲のセルに全部入力されて、かつ文字列に空白がある事が条件で
とりあえず、C2からC30までにはかえりましたが。。。。。
 
文字列のAセル"abc def hij" →Bセル "def"のみで hijは消えてしまいます...
またAセルの文字列のうち一つでも"abc"というように空白をいれての次の文字列がないとエラーになります。
 
simple様からご教示いただいたウインドウに区分されたコードがヒントになり、そして範囲レンジの指定が
必要になってくるんだなと思ってそこで、またにらめっこ状態でただいま煮詰まっております。
 
 
奥が本当に深いです。
 

回答
投稿日時: 20/06/14 20:17:51
投稿者: simple

すでにInstr,Left,Midを使ったものが完成しているので、
Splitについては、あくまで追加的な位置づけですね。

引用:
Sub trialtest()
    Dim i As Long
    Dim tmp As Variant
    For i = 2 to 30
        tmp = Split(Cells(i, 1), " ")
        Cells(i, 1) = tmp(0)
        Cells(i, 2) = tmp(1)
    Next i
End Sub
でやったら、A2セルにある文字列"abc def hij "の文字列がA2からA30までは
指定範囲のセルに全部入力されて、かつ文字列に空白がある事が条件で
とりあえず、C2からC30までにはかえりましたが。。。。。
 
文字列のAセル"abc def hij" →Bセル "def"のみで hijは消えてしまいます...
またAセルの文字列のうち一つでも"abc"というように空白をいれての次の文字列がないとエラーになります。

ああ、これは普通のSplitの使い方ですよね。
これは事実を列挙していただいているんですか?それとも疑問形なんですか?
 
Splitというのは、指定した区切り文字(この場合は、" ")で文字列を
区切って、結果を配列として返せという関数です。
 
Split("abc def hij"," ")は、
"abc" "def" "hij" の3つの要素からなる配列になりますね。
・tmp(0)はその1番目(indexは0から始まる決まりなので)である、"abc" です。
・tmp(1)はその2番目だから、"def"です。
・tmp(2)は使っていないから、そのまま捨てられます。
 
・"abc"だけの場合は、Split("abc"," ")は要素が1個の配列が返ります。
・それに対して、tmp(1)とすると、2番目の要素なんて無い、とエラーになります。
といったようなことなので、別に不思議はないと思います。
 

これにLimit引数を付け加えて、分割数の上限を制限すると、こうなりますね。
どういう配列が結果として返るかを一覧で纏めると、次のとおりです。
    
                split(s," ")         split(s," ",limit=2)
 ------------   --------------       --------------
 s = "a b c"    {"a","b","c"}        {"a","b c"}  ←ここが違う
 s = "a b"      {"a","b"}            {"a","b"}
 s = "a"        {"a"}                {"a"}
 s= ""          空の配列(*)           空の配列   
(*) tmp(0)はエラーとなる。
 
引用:
そして範囲レンジの指定が必要になってくるんだなと思ってそこで、
またにらめっこ状態でただいま煮詰まっております。

 
出してもらっているコードと基本は同じじゃないですか?
入力とするA列のデータの形式に応じて処理を変えるとすれば、
こんな感じになるのでは?
 
Sub trialtest2()
    Dim i As Long
    Dim tmp As Variant

    For i = 2 To 30
        If Cells(i, 1) <> "" Then
            tmp = Split(Cells(i, 1), " ", limit:=2)
            Cells(i, 1) = tmp(0)
            If UBound(tmp) > 0 Then
                Cells(i, 2) = tmp(1)
            End If
        End If
    Next i
End Sub

投稿日時: 20/06/16 10:07:06
投稿者: Mapleleaf

Simple 様
 
お忙しいところ、本当に丁寧にご教示ここまでいただき、お付き合いいただき本当に感謝しております。
詳しい解説により、なるほどなるほどと一つづつ理解しながら勉強させていただいております。
 
最後のものは、疑問形でございました。simple様からヒントご教示いただいたものを組み込めば
と思っていろいろ組み込んだのですが、エラー続出でここまでヒントご教示いただいたのに
できずに力のなさに悔しく、simple様に申し訳なかったです。
 
最後のご教示いただいたコードで、やりたい事が見事に一発で実行できて、それである程度最初から
教えていただいた事が繫がり意味がわかってきました。本当に感謝しております。皆様からヒント
いただきそれをもとに後はコードをかけるようになれるようまだまだ勉強が必要だと感じております。
以前にも、simple様にご丁寧に教えていただいてそれがとても今も役にたっております。
本当にこのようなどこの誰かもわからない素人に教えていただき有難うございます。
 
VBA関係まわりにやってる人誰もいないので、もし宜しかったら教えていただきたいのですが、VBAを基本から
勉強するにあたり、一番最初に勉強すべき事と順番(教室に通う?)みたいなのがあればご教示いただければそれを元にまた基本からやりたいと思っております。VBAのテクニカルの質問とは違って恐縮ですが、ご教示いただければ嬉しい限りです。

回答
投稿日時: 20/06/16 15:12:36
投稿者: simple

>勉強するにあたり、一番最初に勉強すべき事と順番(教室に通う?)みたいなのがあれば
>ご教示いただければそれを元にまた基本からやりたいと思っております。

 
お望みのことへの回答ではないですがコメントします。
教室へ通うのは切っ掛けにはなると思いますが、必須でもないと思います。
内容の説明はあっても、問題解決の練習は最終的にはご自分がやるべきことで、
その経験は教室に通うことは十分とは言えないと思います。
書籍を通じた学習がよいと思います。
 
私は書籍での学習をお薦めしますが、
最近のExcelVBA本は見たことがないので、事情がよくわかりません。
 
下記のようなものの中から、ご自分で書籍を選んで学習されたらいかがでしょうか。
大きな本屋さんに行かれて、ご自分で確認した上で、オウンリスクで選んで下さい。
そのこと自体が大切です。
 
[エクセルVBA本のおすすめ19選|入門者や初心者にもわかりやすい選び方・読み方・勉強の方法]
https://www.fastclassinfo.com/entry/recommended_books
 
【2020年版】Excel VBAの学習におすすめの入門書5選
https://engineer-life.dev/excel-vba-books/
(大村さんの本などは良いかもしれません)
 
特別な王道というものは無いと思います。
要するに、考えながらいくつもの例にあたって、コードを書く経験を積む、
ということに尽きるのではないかと思います。
 
学習の順序も含めて、それらの書籍に書かれているように思います。
 
以下は、私見とおことわりしたうえで若干周辺の事項についてコメントします。
 
1. ネットで学習できるという方がいますが、私は書籍での学習をお薦めします。
   ・書籍のほうが、編集というプロセスを一応は通っているので信頼性は高いと期待される。
   ・ネットだと、その人の重要性判断により、記事が部分的になる可能性。
   ・書籍のほうが、学習の順序にも一定の配慮がされていると期待される。
 
2.手法の検索などという場合は、ネットが有効ですが、
   最初は基本を身につけた方がよいでしょう。
 
3.学習には実際に問題を解くことが有効です。
   書籍の例題のほか、身の回りのちょっとした工夫など。
   それでもなかなかテーマが見つからない、と言う方には、
   質問掲示板に上がった質問について、自分で回答を作成してみる、
   また、実際に投稿してみる、というのも非常に有効でしょう。
    
   書籍を読んで漠然と分かったつもりになっていても、
   イザ書こうとすると、いろいろなミスをするものです。
   その経験が貴重なものになります。

回答
投稿日時: 20/06/17 07:03:17
投稿者: WinArrow
投稿者のウェブサイトに移動

単独セルを設範囲に応用できない
ってことで悩んでいるのかな?
 
セル範囲に適用する応用例
 
Sub test()
Dim myCELL As Range
    For Each myCELL In Range("A2:A30")
        Call BUNKATU(myCELL:=myCELL)
    Next
End Sub
 
Private Sub BUNKATU(ByVal myCELL As Range)
Dim data As sting
    With myCELL
        data = .Value
        If InStr(data, " ") > 0 Then
            .Value = Left$(data, InStr(data, " ") - 1)
            .Offset(, 1).Value = Mid$(data, InStr(data, " ") + 1)
        End If
    End With
End Sub
 
セル範囲をメイン側で指定すれば、基本的な部分を変更せずに済みます。

投稿日時: 20/06/17 19:09:42
投稿者: Mapleleaf

simple さんの引用:
>勉強するにあたり、一番最初に勉強すべき事と順番(教室に通う?)みたいなのがあれば
>ご教示いただければそれを元にまた基本からやりたいと思っております。

 
お望みのことへの回答ではないですがコメントします。
教室へ通うのは切っ掛けにはなると思いますが、必須でもないと思います。
内容の説明はあっても、問題解決の練習は最終的にはご自分がやるべきことで、
その経験は教室に通うことは十分とは言えないと思います。
書籍を通じた学習がよいと思います。
 
私は書籍での学習をお薦めしますが、
最近のExcelVBA本は見たことがないので、事情がよくわかりません。
 
下記のようなものの中から、ご自分で書籍を選んで学習されたらいかがでしょうか。
大きな本屋さんに行かれて、ご自分で確認した上で、オウンリスクで選んで下さい。
そのこと自体が大切です。
 
[エクセルVBA本のおすすめ19選|入門者や初心者にもわかりやすい選び方・読み方・勉強の方法]
https://www.fastclassinfo.com/entry/recommended_books
 
【2020年版】Excel VBAの学習におすすめの入門書5選
https://engineer-life.dev/excel-vba-books/
(大村さんの本などは良いかもしれません)
 
特別な王道というものは無いと思います。
要するに、考えながらいくつもの例にあたって、コードを書く経験を積む、
ということに尽きるのではないかと思います。
 
学習の順序も含めて、それらの書籍に書かれているように思います。
 
以下は、私見とおことわりしたうえで若干周辺の事項についてコメントします。
 
1. ネットで学習できるという方がいますが、私は書籍での学習をお薦めします。
   ・書籍のほうが、編集というプロセスを一応は通っているので信頼性は高いと期待される。
   ・ネットだと、その人の重要性判断により、記事が部分的になる可能性。
   ・書籍のほうが、学習の順序にも一定の配慮がされていると期待される。
 
2.手法の検索などという場合は、ネットが有効ですが、
   最初は基本を身につけた方がよいでしょう。
 
3.学習には実際に問題を解くことが有効です。
   書籍の例題のほか、身の回りのちょっとした工夫など。
   それでもなかなかテーマが見つからない、と言う方には、
   質問掲示板に上がった質問について、自分で回答を作成してみる、
   また、実際に投稿してみる、というのも非常に有効でしょう。
    
   書籍を読んで漠然と分かったつもりになっていても、
   イザ書こうとすると、いろいろなミスをするものです。
   その経験が貴重なものになります。

 
Simple 様
 
お世話になります。親身に最後までご教示いただき有難うございます。ただ漠然と今までやってきましたが、
勉強方法についてのアドバイスをこのようにいただいたのは初めてで本当に感謝しております。早速そのような流れで取り組んでいきます。またいろいろここで質問等行き詰まった時にいれて御手数かける事あるかもしれませんがどうぞ何卒宜しくお願い致します。本当にありがとうございました。