- 締切済み
EXCELのVBAでやれますか?
A1~C1のセルが結合しています。このA1~C1セルに L から始まる文字が入っている場合はその文字をD1にコピー、kから始まる文字が入っている場合はその文字をE1にコピー、と言う事をやりたいのですが、「○○から始まる文字」というのをVBAで出来るのでしょうか?ちなみに当方はVBA超初心者ですので、なるべく解りやすい御回答お待ちしております。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 その質問だけでしたら、教えてほしいというのは、もう少し基本的な勉強をしたほうがよいと思います。Excelのワークシートが分かる人なら、以下のコードなら、一週間も掛かりません。 '------------------------------ If Left(Range("A1").Value,1) = "L" Then Range("A1").Copy Range("D1") ElseIf Left(Range("A1").Value,1) = "K" Then Range("A1").Copy Range("D1") End If '------------------------------ ただ、文字の比較は、Like 演算子のほうが優れています。しかし、Like 演算子には、大文字・小文字比較は、モジュールの先頭に、Option Compare Text をつけなくてはなりません。それで、以下のように、StrComp という、C言語と同じ方法で比較します。 それで、条件をつけて、 '---------------------------------------- '・列に英字が入っているとします。または、入っていないこともあるとする。 '・次に、大文字・小文字の区別がないとする。 '・セルが結合している場合と、ない場合がある。 '---------------------------------------- Sub Test1() Dim n As Variant Dim c As Variant Dim i As Long For Each c In Range("A1", Range("A65536").End(xlUp)) If VarType(c.Value) = vbString Then i = c.MergeArea.Columns.Count If StrComp(Left(c.Value, 1), "L", 1) = 0 Then c.Copy c.Offset(, 4 - i) If StrComp(Left(c.Value, 1), "K", 1) = 0 Then c.Copy c.Offset(, 5 - i) End If Next c End Sub
- noah7150
- ベストアンサー率46% (116/251)
別にVBAで行う必要はないとおもいますが・・・ D1に =IF(LEFT(A1,1)="L",A1,"") E1に =IF(LEFT(A1,1)="k",A1,"") でいいと思います VBAなら書き方はいろいろ出来ますが Range("D1") = IIf(Left(Range("A1"), 1) = "L", Range("A1"), "") Range("E1") = IIf(Left(Range("A1"), 1) = "k", Range("A1"), "") ですかね
Left関数を使えば、文字列の左端の文字を取得できます。 Left(文字列,1) とすれば、左端の1文字を取り出せます。
お礼
すみません。説明が不十分でした。目的はこのセルに最後に入力されたLまたはKで始まる文字を両方とも履歴としてD1とE1に記録しておきたいのです。ですのでこのIF関数ですと、どちらかの履歴が消えてしまい、目的が達成できません。この問題をクリアする方法がございましたら御指導宜しくお願い致します。