エクセルマクロ オンライン講座コメント紹介

コメント紹介
   └ エクセルマクロ・VBA基礎編フォローアップ ベーシック
       └ 文字列を加工してデータ転記する(その3)

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

[11037] 2019-01-30 05:59:29 受講生さんからの投稿です。

お世話になります。問題3について質問させてください。
下記のようにコードを書きました。小川先生と同じように書いたつもりですが、動きません。実行時エラー5と表示されます。そこで試しにRange("C" & gyo).Value = Left(name, slush - 1)をRange("C" & gyo).Value = Left(name, slush )としたところ、動くようになりました(/は入ってしまいますが)。今回のコードにはもう1つ問題があります。半角空欄を認識していません。なぜダメなのかお手数ですが、ご回答お願いいたします。

sub renshu2()
Dim slush
Dim name

Dim gyo
For gyo = 2 To 11
name = Range("b" & gyo).Value
slush = InStr(name, "/")
If name = 0 Then
slush = InStr(name, " ")
End If
Range("C" & gyo).Value = Left(name, slush-1)
Range("D" & gyo).Value = Mid(name, slush + 1)

Next
End Sub

 


[11042] 2019-01-30 08:05:02 小川慶一さんからの投稿です。

受講生 さん:

次回からは、相談時は、実際に作ったコードをまるまる貼り付けてください。
最初の行は sub となっています。
そこから、少なくともこの部分はあとから手書きで追加したものではないか?と推測しました。
それで、こういうお願いを書いています。

プログラムの修正点は、以下のプロシージャ内に僕がしたコメントを参照ください。

sub renshu2()
  Dim slush
  Dim name
  
Dim gyo
For gyo = 2 To 11
 name = Range("b" & gyo).Value
 slush = InStr(name, "/")
 If name = 0 Then '調査対象は、 変数 name ではなく、変数 slush
 slush = InStr(name, " ")
 End If
 Range("C" & gyo).Value = Left(name, slush-1)
 Range("D" & gyo).Value = Mid(name, slush + 1)
  
Next
End Sub


それから、以下は、このプログラムについての追加コメントです。

[1]
インデントしっかり入れてください。僕が書いたコードと同じになるように。
昨日のメールマガジンでも書きましたが、僕の動きをそのままマネることです。
今回の問題をご自身で見破れないのも、整形がなっていないために、コードが読みにくい状態になっているからです。

[2]
変数名に英単語一語のものを使うのは避けましょう。
以下の2つの理由からです。

[2-1]
VBAで実際に使われているキーワードと重複する可能性が高いからです。
「name」というのは、まさに、worksheetオブジェクトのプロパティに存在します。
そういう変数名を使うのは、混乱や思わぬ誤動作の元です。

[2-2]
スペルをミスすると、バカに見えるからです。
参考までに、「スラッシュ」は、英語では、「slush」ではなく、「slash」と書きます。
ひょっとすると英語での意図的に「slush」と書かれたのかもしれませんが、このプログラムはその他の部分から醸し出される雰囲気がダメぽいので、残念ながらそうは思ってもらえないでしょう。

ということなのでおすすめは:
name → namae
slush → kugiri
とかですかね。

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


> お世話になります。問題3について質問させてください。
> 下記のようにコードを書きました。小川先生と同じように書いたつもりですが、動きません。実行時エラー5と表示されます。そこで試しにRange("C" & gyo).Value = Left(name, slush - 1)をRange("C" & gyo).Value = Left(name, slush )としたところ、動くようになりました(/は入ってしまいますが)。今回のコードにはもう1つ問題があります。半角空欄を認識していません。なぜダメなのかお手数ですが、ご回答お願いいたします。
>
> sub renshu2()
> Dim slush
> Dim name
>
> Dim gyo
> For gyo = 2 To 11
> name = Range("b" & gyo).Value
> slush = InStr(name, "/")
> If name = 0 Then
> slush = InStr(name, " ")
> End If
> Range("C" & gyo).Value = Left(name, slush-1)
> Range("D" & gyo).Value = Mid(name, slush + 1)
>
> Next
> End Sub
>
>

 


[11044] 2019-01-30 08:41:43 受講生さんからの投稿です。

お世話になります。ご回答ありがとうございました。

英語を使わない理由がわかりました。その他についてもいただいたアドバイスを参考にいたします。

小川慶一さん:

> 受講生 さん:
>
> 次回からは、相談時は、実際に作ったコードをまるまる貼り付けてください。
> 最初の行は sub となっています。
> そこから、少なくともこの部分はあとから手書きで追加したものではないか?と推測しました。
> それで、こういうお願いを書いています。
>
> プログラムの修正点は、以下のプロシージャ内に僕がしたコメントを参照ください。
>
>
sub renshu2()
>   Dim slush
>   Dim name
>   
> Dim gyo
> For gyo = 2 To 11
>  name = Range("b" & gyo).Value
>  slush = InStr(name, "/")
>  If name = 0 Then '調査対象は、 変数 name ではなく、変数 slush
>  slush = InStr(name, " ")
>  End If
>  Range("C" & gyo).Value = Left(name, slush-1)
>  Range("D" & gyo).Value = Mid(name, slush + 1)
>   
> Next
> End Sub

>
> それから、以下は、このプログラムについての追加コメントです。
>
> [1]
> インデントしっかり入れてください。僕が書いたコードと同じになるように。
> 昨日のメールマガジンでも書きましたが、僕の動きをそのままマネることです。
> 今回の問題をご自身で見破れないのも、整形がなっていないために、コードが読みにくい状態になっているからです。
>
> [2]
> 変数名に英単語一語のものを使うのは避けましょう。
> 以下の2つの理由からです。
>
> [2-1]
> VBAで実際に使われているキーワードと重複する可能性が高いからです。
> 「name」というのは、まさに、worksheetオブジェクトのプロパティに存在します。
> そういう変数名を使うのは、混乱や思わぬ誤動作の元です。
>
> [2-2]
> スペルをミスすると、バカに見えるからです。
> 参考までに、「スラッシュ」は、英語では、「slush」ではなく、「slash」と書きます。
> ひょっとすると英語での意図的に「slush」と書かれたのかもしれませんが、このプログラムはその他の部分から醸し出される雰囲気がダメぽいので、残念ながらそうは思ってもらえないでしょう。
>
> ということなのでおすすめは:
> name → namae
> slush → kugiri
> とかですかね。
>
> よろしくお願いいたします。
>
>
> > お世話になります。問題3について質問させてください。
> > 下記のようにコードを書きました。小川先生と同じように書いたつもりですが、動きません。実行時エラー5と表示されます。そこで試しにRange("C" & gyo).Value = Left(name, slush - 1)をRange("C" & gyo).Value = Left(name, slush )としたところ、動くようになりました(/は入ってしまいますが)。今回のコードにはもう1つ問題があります。半角空欄を認識していません。なぜダメなのかお手数ですが、ご回答お願いいたします。
> >
> > sub renshu2()
> > Dim slush
> > Dim name
> >
> > Dim gyo
> > For gyo = 2 To 11
> > name = Range("b" & gyo).Value
> > slush = InStr(name, "/")
> > If name = 0 Then
> > slush = InStr(name, " ")
> > End If
> > Range("C" & gyo).Value = Left(name, slush-1)
> > Range("D" & gyo).Value = Mid(name, slush + 1)
> >
> > Next
> > End Sub
> >
> >

 


[11047] 2019-01-30 09:58:13 小川慶一さんからの投稿です。

受講生 さん:

お返事ありがとうございます。

特にインデントについては、遠回りなようで、最終的に近道です。

ひきつづきよろしくお願いいたします。


> お世話になります。ご回答ありがとうございました。
>
> 英語を使わない理由がわかりました。その他についてもいただいたアドバイスを参考にいたします。
>
> 小川慶一さん:
>
> > 受講生 さん:
> >
> > 次回からは、相談時は、実際に作ったコードをまるまる貼り付けてください。
> > 最初の行は sub となっています。
> > そこから、少なくともこの部分はあとから手書きで追加したものではないか?と推測しました。
> > それで、こういうお願いを書いています。
> >
> > プログラムの修正点は、以下のプロシージャ内に僕がしたコメントを参照ください。
> >
> >
sub renshu2()
> >   Dim slush
> >   Dim name
> >   
> > Dim gyo
> > For gyo = 2 To 11
> >  name = Range("b" & gyo).Value
> >  slush = InStr(name, "/")
> >  If name = 0 Then '調査対象は、 変数 name ではなく、変数 slush
> >  slush = InStr(name, " ")
> >  End If
> >  Range("C" & gyo).Value = Left(name, slush-1)
> >  Range("D" & gyo).Value = Mid(name, slush + 1)
> >   
> > Next
> > End Sub

> >
> > それから、以下は、このプログラムについての追加コメントです。
> >
> > [1]
> > インデントしっかり入れてください。僕が書いたコードと同じになるように。
> > 昨日のメールマガジンでも書きましたが、僕の動きをそのままマネることです。
> > 今回の問題をご自身で見破れないのも、整形がなっていないために、コードが読みにくい状態になっているからです。
> >
> > [2]
> > 変数名に英単語一語のものを使うのは避けましょう。
> > 以下の2つの理由からです。
> >
> > [2-1]
> > VBAで実際に使われているキーワードと重複する可能性が高いからです。
> > 「name」というのは、まさに、worksheetオブジェクトのプロパティに存在します。
> > そういう変数名を使うのは、混乱や思わぬ誤動作の元です。
> >
> > [2-2]
> > スペルをミスすると、バカに見えるからです。
> > 参考までに、「スラッシュ」は、英語では、「slush」ではなく、「slash」と書きます。
> > ひょっとすると英語での意図的に「slush」と書かれたのかもしれませんが、このプログラムはその他の部分から醸し出される雰囲気がダメぽいので、残念ながらそうは思ってもらえないでしょう。
> >
> > ということなのでおすすめは:
> > name → namae
> > slush → kugiri
> > とかですかね。
> >
> > よろしくお願いいたします。
> >
> >
> > > お世話になります。問題3について質問させてください。
> > > 下記のようにコードを書きました。小川先生と同じように書いたつもりですが、動きません。実行時エラー5と表示されます。そこで試しにRange("C" & gyo).Value = Left(name, slush - 1)をRange("C" & gyo).Value = Left(name, slush )としたところ、動くようになりました(/は入ってしまいますが)。今回のコードにはもう1つ問題があります。半角空欄を認識していません。なぜダメなのかお手数ですが、ご回答お願いいたします。
> > >
> > > sub renshu2()
> > > Dim slush
> > > Dim name
> > >
> > > Dim gyo
> > > For gyo = 2 To 11
> > > name = Range("b" & gyo).Value
> > > slush = InStr(name, "/")
> > > If name = 0 Then
> > > slush = InStr(name, " ")
> > > End If
> > > Range("C" & gyo).Value = Left(name, slush-1)
> > > Range("D" & gyo).Value = Mid(name, slush + 1)
> > >
> > > Next
> > > End Sub
> > >
> > >

 


まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ