• 締切済み

EXCELのVBAでやれますか?

A1~C1のセルが結合しています。このA1~C1セルに L から始まる文字が入っている場合はその文字をD1にコピー、kから始まる文字が入っている場合はその文字をE1にコピー、と言う事をやりたいのですが、「○○から始まる文字」というのをVBAで出来るのでしょうか?ちなみに当方はVBA超初心者ですので、なるべく解りやすい御回答お待ちしております。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 その質問だけでしたら、教えてほしいというのは、もう少し基本的な勉強をしたほうがよいと思います。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)
回答No.2

別に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"), "") ですかね

ktxfk368
質問者

お礼

すみません。説明が不十分でした。目的はこのセルに最後に入力されたLまたはKで始まる文字を両方とも履歴としてD1とE1に記録しておきたいのです。ですのでこのIF関数ですと、どちらかの履歴が消えてしまい、目的が達成できません。この問題をクリアする方法がございましたら御指導宜しくお願い致します。

noname#99913
noname#99913
回答No.1

Left関数を使えば、文字列の左端の文字を取得できます。 Left(文字列,1) とすれば、左端の1文字を取り出せます。

関連するQ&A

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • EXCEL VBA 結合セルに行列操作 

    初めまして、VBA初心者です。 http://okwave.jp/qa4809370.html これと同じような感じなのですが、この場合だと結合セルにコピー できませんでした。 10行目以降がそれぞれAからDまで結合されていた場合はどうなるのでしょうか、また元値A1からH5まで結合してません、さらに空白の場合もあります。どなたか教えてください。

  • VBA教えてください

    VBA初心者です A1~A5までのセルは色は白色のセル A6.A7セルの色は赤色の背景のセルです A1~A5までのセルは B~Dのセルに数値を入力するが A6.A7のセルのB~Dまでのセルは 結合してさらに結合したセルに「停止」 の文字を入力します。 私がVBAでやりたいのは 赤い背景のセルだけに反応して 自動でB~Dのセルを結合し 停止の文字を自動入力できるようにしたいです コードを書いてくれると めちゃくちゃ助かります 回答お願いします。

  • エクセル2003 VBAなのですが

    エクセル2003 VBAなのですが   A   B    C    D    E    F 1 あ   い   う   お   う   123 2 お   さ   え   あ   お   お 3 あ   い   え   お   え   888 上記のような表があるときに 3個以上同じ文字がある場合にセルに色をつけていきたい状況です 上記表でいうと『あ』と『え』と『お』のセルに色をつけたいのです セルには文字列のほかに数字も入っている状況です 単純にCtrl+Fで検索をして『すべて検索』で 出てきたセル全部に色をつける。 それをA1から文字があるところ全部やる と言った事をマクロでやりたいと思っております。 皆様よろしくお願いいたします。

  • VBA

    1 a;b;c;d; 2 e;f;g;h; 3 i;j;k;l; をVBAで   1 a;   2 e;   3 i;   1 b;   2 f;    3 j;   1 c;   2 g;   3 k;   1 d;   2 h;   3 l; としたいのですが、どうしたらいいですか?

  • EXCEL 2010 VBAまたは関数について

    こんにちは 初投稿です。 早速ですが、VBAまたは関数について質問させて頂きたいのですが・・・ 一つのセルに複数の数字と文字列がセルのE1混ざっている場合, (12345abc678cdef9ghijk)と入っている場合 にこの例で行くとセルのA1に12345セルB1に678セルC1に9というように数字で表示させたいのです が、最初関数で A1=VALUE(MID(E1,1,5)) B1=VALUE(MID(E1,9,3)) C1=VALUE(MID(E1,16,1)) と言う形で数字だけ抜き出していたのですが これだと数字の桁数が違ってくる(※正し文字列の長さは一緒 数字だけが桁が違ってきます) と表示されなくなってしまうため、 出来れば関数をいじらなくても表示されるようにしたいのです。 VBAもしくは関数でこの問題を解決出来る方がいらっしゃるなら どうぞよろしくお願い致します。 長文失礼致しました。 | A | B | C | D | E | ------------------------------------------------ 1 | 12345 | 678 | 9 | | 12345abc678cdef9ghijk | 2 | | | | | |

  • Excel VBAの範囲の取得について

    Excel VBAを使い、ある範囲に含まれるセル番号を取得しようとしています。 まず、ある範囲、の指定方法から悩んでいます。 ある範囲を、A1:C5とした場合、 1.A1:C5に同じ文字列を入力し、それを判別して同じ範囲内だと判断させる。 2.A1:C5の範囲に名前を付ける。 3.A1:C5のセルを結合する。 などの方法を思いつきました。 それ以降の処理はA1:C5の範囲だと、『左上はA1,右下はC5』という風に、範囲を作っている左上と右下のセル番号を参照するようにしたいと思っています。 分からなくなってしまっているのは、他に範囲として扱いたい数個のセルが別にも幾つかあって、それを最初に認識した範囲とは別物だと扱いたいと思っています。 たとえば、先ほどA1:C5という範囲を決めましたが、D2:E4という別の範囲があるとします。 A1から順に調べて行って、C5までが同じ範囲と判断されたら、また次のひと塊の範囲はないか調べ、D2:E4が見つかったら処理をする、という感じなのですが、一度調べた範囲はもう調べないとする方法が思いつきません。 ひとくくりにしたい範囲は、毎度変わりますし、範囲に含まれるセルの数もまちまちです。 上記の、範囲を決める3つの方法それぞれによって、その後の方法も変わってきそうな感じがするのですが、どれが一番適当な方法かも決めかねています。 範囲指定しようとしているセルが一つのみだった場合、結合している範囲かどうかを調べる方法は使えない気もします。 分かりづらい質問で申し訳ありません。 よろしくお願いいたします。

  • EXCEL VBA コピーしたシートへ値をコピペ

    選択対象シート数は4つで、シート名は、「101」「102」「103」「104」とします。 シート名「表紙」のA列のセルはA10:101 A11:102 A12:103 A13:104となっており、 使用者はとなりのB10~B14セルに「○」「×」を入力規則から選択します。 また、シート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号を入力します。 ここまではできていて、下記のプログラムを追加したいのですが、うまくいきません。 さらに、○を付けたのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 使用者が文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 文字列があれば、○を付けてコピーした対応するシートの中のH3~P3セルへ貼り付けたいのです。 D10、D11、D12、D13セルが空白のときは何も処理は行わないとします。 たとえば、下記のようにB12セルが○で、D12セルに文字列があれば、 D12~L12セルの値を、コピーで作成したシート103の中のH3~P3セルへ貼り付けたいのです。 B11セルも○ですが、D11セルに文字列がないのでシートのコピーだけ行います。 アドバイスいただけると助かります。 VBA初心者で申し訳ございませんが、よろしくお願いいたします。 <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    × 11 102    ○ 12 103    ○       A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   A1-9 13 104    × <プログラム> Sub TestSample() If Application.CountIf(Worksheets("表紙").Range("B10:B17"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製造番号 As String 製造番号 = Range("B6").Value Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy ' コピーしたすべてのシートに製造番号を書き込む For Each 各シート In Worksheets With 各シート .Activate Cells(1, 2) = 製造番号 End With Next Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。, vbInformation" End Sub

  • VBAについての質問です、お願いします。

    VBA初心者のものです。 Excelで毎日コピペが大変なので、VBAをネットで調べるもののまったく上手くいきません。 どうかシステムが得意な方、教えて頂けませんか? 要件は Bデータ.xlsとCデータ.xlsとDデータ.xlstとEデータ.xlsの各sheet1のA1からZ100セルの データをAデータ.xlsのsheet1に各データ順にコピー&ペーストしてならべたいのです。 イメージは、 Aデータのエクセルを開いて、マクロボタンを押す。 そうすると、各B・C・D・Eのエクセルが自動的に開いてそれぞれのsheet1のA1からZ100セル をコピーします。 各B・C・D・Eのエクセルが自動的に閉じます。 各B・C・D・Eのエクセルの各データが、 Aデータのsheet1に、すべてのデータが順にコピーされる手順です。 できれば、ファイルサーバーにエクセルを保存しているので、 その点も加味いただけると嬉しいです。 (初心者なので、マクロの構文を書いて頂ける場合に、ファイルとかシートを自分で 設定する場合があるときには、説明文を頂けると嬉しいです。) 以上、宜しくお願い致します。

  • Excel2007のVBAで文字列を結合

    Excel2007のマクロで文字列を結合したいのですがうまくいきません。 下記がお題になります 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

専門家に質問してみよう