• ベストアンサー

excel2003の入力を省力化したい

写真のように A,C,E列に記号 B,D,F列に文字が入っています。 そこで、A~F列に何かしら入力した場合、 G列、H列には、それぞれ A-C-E、B-D-Fを ハイフンで連結した文字を、自動で表示させたいです。 ただし、A~F列の値を消した場合、G列とH列の値もクリア させたいです。 どうか、VBAの記述を教えていただけないでしょうか? できれば、早くて、負荷の少ない記述が助かります。

  • puyopa
  • お礼率87% (459/525)

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! すでに回答は出ていますが、参考程度で・・・ Sheetモジュールです。 A~F列に空白セルが一つでもあればG・H列は表示しないようにしています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long If Intersect(Target, Range("A:F")) Is Nothing Then Exit Sub i = Target.Row If i > 1 Then If WorksheetFunction.CountBlank(Cells(i, "A").Resize(, 6)) = 0 Then With Cells(i, "G") .NumberFormatLocal = "@" .Value = Cells(i, "A") & "-" & Cells(i, "C") & "-" & Cells(i, "E") .Offset(, 1) = Cells(i, "B") & "-" & Cells(i, "D") & "-" & Cells(i, "F") End With Else Cells(i, "G").Resize(, 2).ClearContents End If End If End Sub こんな感じではどうでしょうか?m(_ _)m

puyopa
質問者

お礼

回答ありがとうございました。 とても合理的で、素晴らしい記述だと思います。 大変勉強になりました。使わせていただきます。

その他の回答 (2)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

VBA的には該当シートのシートモジュールに以下のような感じでよろしいかと思います。 Private Sub Worksheet_Change(ByVal Target As Range) Dim C As Range For Each C In Target If Not Intersect(C, Range("A:A,C:C,E:E")) Is Nothing Then Application.EnableEvents = False If Cells(C.Row, "A").Value = "" And Cells(C.Row, "C").Value = "" And Cells(C.Row, "E").Value = "" Then Cells(C.Row, "G").ClearContents Else Cells(C.Row, "G").Value = Cells(C.Row, "A") & "-" & Cells(C.Row, "C") & "-" & Cells(C.Row, "E") End If Application.EnableEvents = True ElseIf Not Intersect(C, Range("B:B,D:D,F:F")) Is Nothing Then Application.EnableEvents = False If Cells(C.Row, "B").Value = "" And Cells(C.Row, "D").Value = "" And Cells(C.Row, "F").Value = "" Then Cells(C.Row, "H").ClearContents Else Cells(C.Row, "H").Value = Cells(C.Row, "B") & "-" & Cells(C.Row, "D") & "-" & Cells(C.Row, "F") End If Application.EnableEvents = True End If Next C End Sub

puyopa
質問者

お礼

回答ありがとうございます。 私がやろうとしていた、イメージに近い記述でした。 勉強になりました。

noname#203218
noname#203218
回答No.1

関数で対応可能ですのでマクロでなくても良いのではないのでしょうか。 G2式=IF(COUNTIF(A2:F2,"")=0,A2&"-"&C2&"-"&E2,"") H2式=IF(COUNTIF(A2:F2,"")=0,B2&"-"&D2&"-"&F2,"") 下方にフィルコピー 0から始まる数値はテキストで入力されてるものとしています。 数字1桁だけ入力し、セルの表示型式で先頭に0を表示させているのでしたら、違う関数になります。 例えば数値が2桁限定であれば下記で可能です。2桁3桁が混在すると処理できません。 G2式=IF(COUNTIF(A2:F2,"")=0,RIGHT("0"&A2,2)&"-"&RIGHT("0"&C2,2)&"-"&RIGHT("0"&E2,2),"")

puyopa
質問者

お礼

回答ありがとうございます。仰せられる通り全て文字列です。 説明不足ですみません。 関数でのやりかたは、分かるのですが、行が増えてファイルを重くしたくない。 他のユーザーに関数を操作あせたくない、等の理由でvbaを希望します。

関連するQ&A

  • Excelの入力式について

    Excelの入力式について教えてください。 たとえば、A1セル~F1セルに数値が入っていて、G1セルA1+B1の値、H列にC1+D1の値 I列にE1+F1の値としたい場合、 G1セルに数式を入れてH列にコピーするとB1+C1になってしまいます。 上手くやる方法はないのでしょうか。 1列ずつわざわざ空白列を作るのは嫌ですし、たくさんあったら数式を打ち込むのも大変です。。。

  • エクセル:複数セルからの参照

    お世話になります。 A,B,C列にデータが入っています。 D,E,F列に参照のためのデータがあります。 A,B,C列はそれぞれD,E,F列に対応しています。 A,B,C列と同じ並びのデータが入っている行をD,E,F列から探し、その隣のG列の値をH列に返す。 D,E,F列の並びが重複する行はありません。 A,D列は場所の名前、B,C,E,F列には数字が入っている。 例) A1に事務室 B1に20 C1に3 が入っているとする。 D/E/F列が 事務室/20/3 の並びになっているのが10行目の場合、H1にG10のセルの値を返す。 この場合、H列にはどんな計算式を入れておけばよいのでしょうか? A,B,C列と同じ並びのデータがD,E,F列で見つからない場合は空白をH列に返す。 ちなみにD/E/F列が 事務室/20/3 の並びになっている行は10行目しかないです。 よろしくお願いします。

  • Excel複数テーブルのマッチング処理について

    実現したいことは、以下のような形式で3つの表があり、A列をキーとして添付の結果1、結果2のような出力を別シートに行なうことです。 マッチング処理なのですがなかなか考えがまとまりません。 おそらく関数では難しくVBAで処理するのだろうかと思いますが、経験が浅く手詰まり状態です。 恐れ入りますがご指南のほどよろしくお願いします。 要件と致しましては、 1.A列がキー項目となります。 2.表1、2、3とも列数は固定です。 3.表1はキー(A1、A2)に対し行が一意です。(マスター) 4.表2、3はキー(A1、A2)に対し行が複数行存在します。(必ず1行以上は存在します) 5.上記の場合、添付結果1または結果2のように表示したい。 ・A列は値が重複しても同じ値を表示します。 ・A列以外は値が重複した場合空欄を表示します。 ・列の長さは同一キー項目で一番行数が多いものとなります。 5番の要件で苦慮しています。どうかよろしくお願い致します。 ----------------------------- 表1 A列、B列、C列、D列、E列 A1 ,B1 ,C1 ,D1 ,E1 A2 ,B2 ,C2 ,D2 ,E2 表2 A列、F列、G列 A1 ,F1 ,G1 A1 ,F11 ,G11 A2 ,F2 ,G2 A2 ,F22 ,G22 A2 ,F222 ,G222 表3 A列、H列 A1 ,H1 A1 ,H11 A1 ,H111 A2 ,H2 A2 ,H22 A2 ,H222

  • Excelとピタゴラスの定理

    この表のA列には直角三角形の垂辺、C列には 同じく底辺、F列には斜辺の長さが書き込まれる。今、A2セルに3.00、C2セルに4.00、F2セ ルに5.00 の値を入れたので、垂辺・底辺それぞれの2乗の和であるE2セルの値と斜辺の2乗であ るG2セルの値は一致するはずである。それが一致しているかどうかを確かめる式がH2セルに入 れられている。H2セルをアクティブにして数式バーを見るとわかるように、このセルに入ってい る式は=E2=G2 というものである。すなわち、E2セルの値とG2セルの値が等しければ 論理値True を返し、そうでなければ同じくFalse を返す式である。この場合、当然True が返される。 次に、A3セルには式「=A2+ 0.03」を、C3セルには「=C2+ 0.04」を、F3セルには「= F2+ 0.05」を入れ、第3行目のその他のセル(B3,D3,E3,G3,H3)には第2行目の 同じ列のセルにある式を複写する。そうすると、ここでも垂辺:底辺:斜辺の長さの比は3:4: 5になっているからH3セルにはTrue が返されるはずである。 この第3行目のA列からH列まですべてのセルの式をそのまま下方に複写すれば、どの行でもA 列:C列:F列の値の比は3:4:5になるから、H列の値はすべてTrue になるはずである。実際、 どこまで複写しても同じ行のE列のセルとG列のセルに示された値は等しいように見える。しかし、 H列ではTrue ではなくFalse が返される場合がある。 1-A:垂辺 B:垂辺の二乗 C:底辺 D:底辺の二乗 E:二乗の和 F:斜辺 G:斜辺の二乗 H:E=G 2-A:3.00 B:9.00 C:4.00 D:16.00 E:25.00 F:5.00 G:25.00 H:TRUE 3-A:3.03 B:9.18 C:4.04 D:16.32 E:25.50 F:5.05 G:25.50 H:TRUE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24-A:3.66 B:13.40 C:4.88 D:23.81 E:37.21 F:6.10 G:37.21 H:TRUE 25-A:3.69 B:13.62 C:4.92 D:24.21 E:37.82 F:6.15 G:37.82 H:FALSE 26-A:3.72 B:13.84 C:4.96 D:24.60 E:38.44 F:6.20 G:38.44 H:FALSE この現象がどうして起きるのかを、高校生にわかるように、簡単に説明しなさい。 という問題なのです。教えてください。お願いします

  • EXCEL

    A-B-C-D-E-F-G 1-A-W-A-1-B- 2-B-A-N-2-C- 3-C-K-A-3-B- 4-D-A-I-4-E- 5-E-R-X-5-A- 例えば,エクセルで表のようになっている場合に, 列AにF1の値(表の場合は文字B)で検索をかけ,検索に該当した行(表の場合では行2)の列Dの値をG1に表示する方法はあるでしょうか?? 簡単に言うと,列Gに自動的にFに対応するDの数値を入力したいのです.自動的に列Gを下の表のようにすることは可能でしょうか? A-B-C-D-E-F-G 1-A-W-A-1-B-2 2-B-A-N-2-C-3 3-C-K-A-3-B-2 4-D-A-I-4-E-5 5-E-R-X-5-A-4 投稿すると文字がずれてしまって表が見難くてすいません. どなたか,ご教授よろしくお願いします.

  • Excelで飛び飛びのセル(列)を参照したいのですが…その2

     ある「sheet1」で、G1="A",H1="B",I1="C",J1="D",K1="E",L1="F",M1="G",N1="H",O1="I",P1="J",Q1="K",・・というように文字が入力されているとすると、5列飛びの値A,F,K・・・(G1,L1,Q1・・・)が欲しいのです。そして、その値が「sheet2」に、C5=A,D5=F,E5=K,F5=P・・・となるようにしたいのです。ただ数値が5ずつ増加するのではなく、そのセルに入力されている文字列を参照したいのです。  それをまた、「sheet1」の、G2="A",H2="B",I2="C",J2="D"・・・の値でも同じ事をしたいのですが・・・。  よろしくお願いします。

  • 文字列連結パターンが多数ある場合

    文字列が「A B C D E F」とあるとします。 これらはDB上で連結するかしないか(0しない1する)のフラグをそれぞれ持っています 例えば取得したふらぐがA(1)B(1)C(0)D(0)E(1)F(0)だったら 連結後の表記は「A、B、E」となります。 if分でずらずら条件を記述し、連結することは可能ですが、何とかして(ループしてとか?)短いステップで実装したいと考えているのですが全く良い案が浮かびません。 何か私に良い方法をご教授していただけないでしょうか。 よろしくお願いいたします

    • ベストアンサー
    • PHP
  • 方程式の解き方

    アルファベット大文字 A~I の値が決まっている時、小文字「z」の値が決まれば、 下記方程式を使用し、小文字「y」の値が求まります。 その反対に、小文字「y」の値が分かっているときに、小文字「z」の求め方が分かりません。 色々展開し試みましたが、全く違う結果になってしまいます。 分かる方がいらっしゃれば、宜しくお願い致します。 a = z × A + B b = C ÷ z × 100 c = D ÷ ( b + E ) d = ((( 100 - a )÷ 100 × D )-( F × c - 1 )) × 100 ÷ G e = D - ( F + E ( b × a ÷ 100 ) )× c f = 1 - e × 100 ÷ G ÷ d g = d × ( 1 - f × G ÷ H × I ) y = g ÷ D

  • 【Excel】該当データ表示方法について

    Excelの表で、(A)列にデータ名、(B)列にデータ値が入力されているとして、 1.(C)列に(B)列のデータ値の種類を昇順で表示、 2.(D)列に(C)列のデータ値を持つ(A)列の文字を表示、 3.(E)列に(D)列のデータ種類の数を表示 という3つの内容を実現したいのですが、(1つでも) ご存知の方、教えて下さい。よろしくお願いしますm(__)m 【イメージ】   | (A) (B) (C)  (D)   (E) ――――――――――――――――――― (1)| A 10 10 A、D、E   3 (2)| B 20 20 B、G    2 (3)| C 30 30 C、F    2 (4)| D 10 (5)| E 10 (6)| F 30 (7)| G 20

  • エクセルでカンマ区切り文字を各行に分解するマクロを書きたい

    WindowsXP Excel2003 エクセルで以下ができるマクロを書きたいです。 B列にはカンマ区切りで文字列が入っています。 カンマ区切りの数は行によって様々です。 この表をB列のカンマ区切り文字を各行に分解したいです。 その際、A列とC列は分解前の値と同様です。 このようなマクロは書けますかね? A列     B列     C列 あ     a,b,c    100 い     d,e     200 う     f      300 え     g,h     400     ↓ A列     B列     C列 あ     a      100 あ     b      100 あ     c      100 い     d      200 い     e      200 う     f      300 え     g      400 え     h      400

専門家に質問してみよう