エラー表示:コンパイルエラー、subまたはfunctionが定義されていません。 (苗字2文字設定)正常に動きます Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub ActiveSheet.Name = Left(Range("A1"), 2) End Sub
(苗字3文字・1文字対応)正常に動きません Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub ActiveSheet.Name = Left(Range("A1"), Find(" ", Range("A1")) - 1) End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then
Exit Sub
End Sub
Dim shName As String
If [[苗字が二文字のとき]] Then
shName = ... '苗字が2文字のときの処理
Else
shName = ... '苗字が2文字でないときの処理
End If
ActiveSheet.Name = shName
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
> If Intersect(Target, Range("A1")) Is Nothing Then
> Exit Sub
> End Sub
>
> Dim shName As String
> If [[苗字が二文字のとき]] Then
> shName = ... '苗字が2文字のときの処理
> Else
> shName = ... '苗字が2文字でないときの処理
> End If
> ActiveSheet.Name = shName
> End Sub
受講生さんの投稿
(投稿ID: 4768)
動画では取り扱われていなかった内容で恐縮ですが、例えばエクセルシートのA1セルに氏名が表示されたら、イベント機能でシート名が苗字に変更されるコードを書きたいのですが、うまくいきません。
Left関数で左から2桁を取ってくるコードはうまく動きましたが、苗字が3文字あるいは1文字の方についてもうまく表示されるよう、Find関数を使って、空欄の前まで取ってくるコードを取り入れたのですが、(通常の関数ではうまくいくのですが)エラーで止まってしまいます。
イベント機能時はFind関数は使用できないでしょうか?
エラー表示:コンパイルエラー、subまたはfunctionが定義されていません。
(苗字2文字設定)正常に動きます
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range("A1"), 2)
End Sub
(苗字3文字・1文字対応)正常に動きません
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range("A1"), Find(" ", Range("A1")) - 1)
End Sub
小川慶一さんのコメント
(コメントID: 6673)
こんばんは。
> イベント機能時はFind関数は使用できないでしょうか?
Find関数はエクセルのワークシート関数です。マクロにはありません。ということで、イベント機能時か如何に関わらず使えません。
ではどうするか?Replace関数を使います。
それから、同一名称のプロシージャはひとつのモジュール内にひとつしか作れません。
ということで、ひとつのプロシージャを作り、その中で条件分岐を書くことになります。
たとえば以下のような感じですね。
(条件式はもっとうまい書き方があるはずですが、いただいた情報からは最適解が分からないのでとりあえず書いてみたという感じです)
なお、いただいたマクロについてもう少しコメントすると、セルの値を取得するのに .Value が抜けていたり、 Find(...) 内の第一引数が " " (半角スペース、全角スペースで、長さ2の文字列)だったり、ツッコミどころが多いです。
これらなどから察するに基礎編レベルの演習が不足していますので、基礎編フォロアップベーシックの演習をしっかりやってください。最低でも3周はやっていただきたいところです。
受講生さんのコメント
(コメントID: 6680)
お返事遅くなり申し訳ございません。
Find関数がマクロでは使用できないとのことを理解しました。
また基礎編フォロアップベーシックをやってみて、苗字の取得がうまくできました。Instr関数を使ってうまくいきました。
ありがとうございました。
なお基礎編フォロアップベーシックは何故か途中で学びをスキップしていたようで、今回初心に戻り最初から取り組みました。ご指摘の通り、自身の基礎的なスキルが足りていないことを自覚しました。これから毎日、型を覚えてしまうくらい何度も繰り返し問題を解いて、力をつけたいと思います。
また、不明点があれば質問させてください。
ありがとうございました。
> 受講生 さん:
>
> こんばんは。
>
> > イベント機能時はFind関数は使用できないでしょうか?
>
> Find関数はエクセルのワークシート関数です。マクロにはありません。ということで、イベント機能時か如何に関わらず使えません。
> ではどうするか?Replace関数を使います。
>
> それから、同一名称のプロシージャはひとつのモジュール内にひとつしか作れません。
> ということで、ひとつのプロシージャを作り、その中で条件分岐を書くことになります。
> たとえば以下のような感じですね。
> (条件式はもっとうまい書き方があるはずですが、いただいた情報からは最適解が分からないのでとりあえず書いてみたという感じです)
>
>
>
> なお、いただいたマクロについてもう少しコメントすると、セルの値を取得するのに .Value が抜けていたり、 Find(...) 内の第一引数が " " (半角スペース、全角スペースで、長さ2の文字列)だったり、ツッコミどころが多いです。
> これらなどから察するに基礎編レベルの演習が不足していますので、基礎編フォロアップベーシックの演習をしっかりやってください。最低でも3周はやっていただきたいところです。
>
小川慶一さんのコメント
(コメントID: 6685)
こんにちは。
> また基礎編フォロアップベーシックをやってみて、苗字の取得がうまくできました。Instr関数を使ってうまくいきました。
> ありがとうございました。
本件、当初の課題は解決したということですね。
よかったです。
基礎編ベーシックの演習しっかりやると、解決能力高まりますよ。
ひきつづき、お楽しみください☆