• ベストアンサー

Excel2007で抜き取り?

ア、イ、ウ、エ、オ、カ、キ、ク、ケ、コの記号のいずれかがセルA3~J3の各セルにダブルことなく適当に入ってます。L3とM3に1~10までのどれかを入れて、 (1)L3に1が入ると、A3に入った記号がO3にコピーされ (2)M3に5が入ると、A3から5番目のE3に入った記号がP3にコピーされる という仕組みにしたいです。 今は例えで3行目を使いましたが、4行目、5行目.....とできるようにしたいです。 誰かよろしくお願いいたします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

こんばんは シートモジュールに貼り付けてお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Intersect(.Cells, Range("L:M")) Is Nothing Then Exit Sub If .Row < 3 Or .Value = "" Then Exit Sub If Not IsNumeric(.Value) Then Exit Sub .Offset(, 3).Value = Cells(.Row, .Value).Value End With End Sub

961awaawa
質問者

お礼

いきなりの補足を利用しての別の質問、失礼しました。 watabe007さんに沢山助けてもらってたんでこれまでを推測していただけ安いと思い補足にてワガママに質問してしまいました。よろしければここの解答でアドバイス等をいただけたらたすかります。

961awaawa
質問者

補足

駆け出し段階でありながら、今までこのサイトでwatabe007さんに 数々質問をさせていただきました。そして数々の解答と共にソースもいただきました。ありがとうございます。 これらのソースを1つのworkbookの標準モジュールに書きました。(こういう理解の仕方で良いのかわからないですけど?) そのブックをコピーして別のデータを入れました。 コピー元のブックにある標準モジュールのソースがコピーしたブックで使えると思いましたがエラーになります。 コピー元のブックの標準モジュールのソースがコピーしたブックで使える様にするにはどうすればよろしいでしょうか? コピーしたブックのデータ内容は変えてますが形は同じなので使えるはずなのですが。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

質問を読み解くのが、手間がかかった。 (質問の標題は中身を表せてない) 小生なりに、整理して文章にしてみた。 ーー A列からJ列までは、事前にデータが入っている。他セルとはかかわらない独立データ。 K列は余裕列。 L列と,M列は変動する。N列は余裕列。 L列かM列には、それぞれ数ものnが入る。1-10までのどれか。A-J列と対応させる ための制約から10以下。 L列かM列の数字nにより、その行のA1よりの、nだけOFFSETさせた列の値を採って、 O列かP列に値をセットする。 ’-- 例データ 作りやすいからの理由で下記にしたもの。 Sheet1のA1:J10 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3 A4 B4 C4 D4 E4 F4 G4 H4 I4 J4 A5 B5 C5 D5 E5 F5 G5 H5 I5 J5 A6 B6 C6 D6 E6 F6 G6 H6 I6 J6 A7 B7 C7 D7 E7 F7 G7 H7 I7 J7 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 A10 B10 C10 D10 E10 F10 G10 H10 I10 J10 ーーー Sheet1の Worksheet_Changeイベントに下記をコピペ。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("L:M")) Then Application.EnableEvents = False '-- r = Target.Row c = Target.Column '-- MsgBox "行=" & r MsgBox "列=" & c n = Target.Value 'L列かM列の選択したセルの値 MsgBox "値 = " & n If n > 10 Then 'エラー MsgBox "値が指定範囲を超えている" Application.EnableEvents = True Exit Sub End If m = Cells(r, n) 'その値 MsgBox "A-J列の選択した値" & m Range(Cells(r, "O"), Cells(r, "Y")).Clear '--- Select Case c Case 12 'L列の場合 O列へセット Cells(r, "M").Clear Cells(r, "O") = m Case 13 'M列の場合 P列へセット Cells(r, "L").Clear Cells(r, "P") = m End Select '--- Application.EnableEvents = True End If End Sub テストが終わったらMsgBoxの行は削除すること。 ーーー 第I行目から第5行目までのL列またはM列を適宜入力した結果例 L列 M列 ー 3    C1 <--P1セル 5 ー   E2  <--O2セル ー 9    I3  <--P3セル 6 -     F4  <--O4セル ー 8    H5  <--P5セル 便宜的に上記のーは空白セルを示す。 === 実際のケースはどういうものだろうか。予想もつかない。 当方のテストも少数で、不完全化も。 == 関数で解決できると思ったかもしれないが、難しのではないか。 ・L列非空白ー>O列に受ける式を入れる   値はINDEX関数でL列入力の(順番目を表す)数字でA列からの何番目列からとる。 ・M列非空白ー>P列に受ける式を入れる   値はINDEX関数でM列入力の数字でA列からの指定した何番目列からとる。 (大原則)関数は値をセットするセルの方に式を入れないとならない。 一方、VBAは望みの適切な位置のセルに値を設定できる。また中間値も変数として保持できるので、考えやすい。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

添付画像のようなことでしょうか。 ならば O3=OFFSET(A3,0,L3-1) P3=OFFSET(A3,0,M3-1) でいかがでしょうか。

961awaawa
質問者

お礼

Hohopapaさんありがとうございます。 P3=OFFSET(A3,0,M3-1) の0の部分を空白にしたいのですがどのようにしたらよろしいでしょうか? 詳細設定などでの0無しにはしたくないんです。 P3=OFFSET(A3,空白,M3-1) で抜き取られた物が0の場合は0表示にしたいです。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.3

》 L3とM3に1~10までのどれかを入れて… とのことだけど、 (1)L3に1以外が入ると、Ò3はどうなるの? (2)M3に5以外が入ると、P3はどうなるの?

回答No.2

これって、学校の宿題かな? =MID(CONCATENATE(A3,A4,A5,A6,A7,A8,A9,,A10,A11,A12),B3,1) って感じでいいのじゃーないかな?

961awaawa
質問者

お礼

ありがとうございました。

関連するQ&A