[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで指定した所へデータを貼り付けたい』(お肉)
例えばデータの一覧表を作成していて別なシートで入力したモノをその一覧表に貼り付けしたいのですが、貼り付け先の行を変更したい場合どうすればよろしいでしょうか?
データの一覧表と入力シートは別にあります。
30人分のデータを入力したいです。
必要事項は入力シートで入力し、最後にボタン(マクロを登録)を作って貼り付けをしたいです。
指定の行は入力シート(仮にA2に入力規則で番号を選択出来るようにします)で選択します。
このような感じで行いたいのですがいかがでしょうか?
質問に不備な点はあるとは思いますが何卒よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>質問に不備な点はあるとは思いますが何卒よろしくお願いします。
具体例を挙げたら如何ですか?
一発で解決しますよ。
(半平太) 2015/06/18(木) 20:23
(お肉) 2015/06/19(金) 10:04
顧客情報というのがどういった項目があるのかわからないので、とりあえずこちらも例として
※入力シート A B C D E 1 番号 従業員ID 氏名 住所 TELL 2 1 0001 山田太郎 東京都 080
入力欄に貼付る行番号を指定したいとのことでしたので 挿入→名前→名前の定義で以下のように設定します。 名前…なんでもいいです。 選択範囲…=OFFSET(一覧表!$A$2,0,0,COUNTA(一覧表!$A:$A)-1,1)
入力シートのA列を選択して 入力規則 入力規則の種類…リスト 元の値…=上でつけた名前
これでたぶん一覧表のA列の番号がでるようになると思います。
次にシートにボタンを設置して以下のマクロを登録
Option Explicit
Sub test()
Dim wsI Dim wsN Dim v2 As Variant Dim i As Long Dim lastRow As Long Dim TargetNo As Long Dim PasteNo As Variant
Set wsI = Worksheets("一覧表") Set wsN = Worksheets("入力")
v2 = wsN.Range("A1").CurrentRegion.Value
For i = 2 To UBound(v2) If v2(i, 1) = "" Then With wsI lastRow = .Cells(Rows.Count, 1).End(xlUp).Row If lastRow = 1 Then TargetNo = 1 Else TargetNo = .Cells(lastRow, 1).Value + 1 End If
With .Cells(lastRow + 1, 1) .Value = TargetNo .Offset(, 1).Value = v2(i, 2) .Offset(, 2).Value = v2(i, 3) .Offset(, 3).Value = v2(i, 4) .Offset(, 4).Value = v2(i, 5) .Offset(, 5).Value = v2(i, 6) End With End With Else TargetNo = v2(i, 1) With wsI PasteNo = Application.WorksheetFunction.Match(TargetNo, .Columns(1), 0) With .Cells(PasteNo, 2) .Value = v2(i, 2) .Offset(, 1).Value = v2(i, 3) .Offset(, 2).Value = v2(i, 4) .Offset(, 3).Value = v2(i, 5) .Offset(, 4).Value = v2(i, 6) End With End With End If Next i End Sub
入力シートの番号が空白の場合は一覧表シートの最終行に追加でデータを転写 入力シートの番号が選択されている場合はその番号を検索してその行に上書き
イメージとしてはこんな感じでしょうか? 一人ずつ入力していくならフォームを立ち上げたほうがいいような気もしますが。
(KUKI) 2015/06/19(金) 12:17
デバックは
.Offset(, 4).Value = v2(i, 6)
の部分で色がついています。
それともう少し踏み込むと
入力シートで
A B C D E
1 番号 従業員ID 氏名 住所 TELL 2 6 0006 高橋勉 新潟県 090 と入力した時に
一覧表シートが
A B C D E
1 番号 従業員ID 氏名 住所 TELL 2 1 0001 山田太郎 東京都 080 3 2 0002 佐藤太 埼玉県 070 4 3 0003 蜷川一郎 東京都 080 5 4 0004 飯沼博美 新潟県 090 6 5 0005 藤堂太郎 埼玉県 070 7 6
の様な状態の時に
入力シートの『A2〜E2』を、
一覧表シート『A7の所からE7まで』に貼り付けたい
尚、行の指定は入力シートの番号の内容(B2に入力した数字)によるものとする
と言うようなイメージですがよろしかったでしょうか?
不勉強で申し訳ありませんがお付き合い頂ければ助かります。
よろしくお願いします。
(お肉) 2015/06/19(金) 20:33
>それともう少し踏み込むと
踏み込んだとおっしゃいますが、私が「具体例を挙げたら」と云ったのがこのレベルです。
質問に際して、始めからこういうものを掲示する様にしていただくと、 回答者はあれこれ想像(=妄想)する必要が無く、無駄な回答を書かないで済みます。
中間で「必要な部分を情報の一覧のシートに転写させたいのです」との説明がありましたが、 これとて「必要な部分とは入力情報の内のどの部分なのか? 全部なのか、飛び飛びのデータになるのか?」と云う 疑問が生じますので、十分とは言い難い代物です。
やむなく、KUKIさんがたたき台を作って、話を先に進めた・・・のですが、
> ※入力シート > A B C D E > 1 番号 従業員ID 氏名 住所 TELL > 2 1 0001 山田太郎 東京都 080
レイアウトはE列までのものでした。(左端の番号は行番号であって、データではない) つまり「5」列までしかデータが無いのです。 ↓ にも関わらず、.Offset(, 4).Value = v2(i, 6) と書いたので、配列の無いところ指定してしまった。
なので、このエラーが出ました。 ↓ >インデックスに有効範囲がありませんと出ますが何がいけないのでしょうか? >デバックは >.Offset(, 4).Value = v2(i, 6) >の部分で色がついています。
・・で、その問題を解消しようかなと思ったのですが、 今度はお肉さんが、こんなレイアウトに(微妙に)変えてしまった。 ↓ > A B C D E F > 1 番号 従業員ID 氏名 住所 TELL > 2 6 0006 高橋勉 新潟県 090
6列の入力のデータになったのはいいのですが、一体A列の番号は何なのですか? そのデータはどうするんですか?
入力シートにあって、一覧表にもある。なら、転記しないとまずそう・・・・でも
>入力シートの『B2〜F2』を、 > 一覧表シート『B7の所からF7まで』に貼り付けたい
とリクエストされたら、また妄想しなければならない羽目になります。
(半平太) 2015/06/20(土) 15:50
>修正しますので再度よろしくお願いします。
相変わらず、仕様が明瞭とはいいにくい状況です。
こっちで勝手に決めますよ。 ↓ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 入力シートの『A2〜E2』を 一覧表シート『A7の所からE7まで』に貼り付ける。 A7にする理由は「入力シートのA2セル(番号)が、一覧表シートのA7の値と一致するから」 もし、一致するものが無かった場合は、一覧表シートの最下行の下に追加する。
入力シートのデータが複数行ある場合は、上から順に実行し、 A列のデータが空白になるところで処理を中止する。
従って、入力シートのA列が空白の場合は、たとえB列に何かデータがあったとしても無視されます。 また、更にその下の行のA列にはデータがあったとしても、それらの行は何の処理も行われないことになります。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<一覧表 実行前> 行 __A__ ____B____ ____C____ ___D___ __E__ 1 番号 従業員ID 氏名 住所 TELL 2 1 1 山田太郎 東京都 80 3 2 2 佐藤太 埼玉県 70 4 3 3 蜷川一郎 東京都 80 5 4 4 飯沼博美 新潟県 90 6 5 5 藤堂太郎 埼玉県 70
<入力 データ> 2行あったと仮定します。(高橋さんは新規従業員) 行 __A__ ____B____ ___C___ ___D___ __E__ 1 番号 従業員ID 氏名 住所 TELL 2 6 6 高橋勉 新潟県 90 3 2 2 佐藤太 埼玉県 9999
<一覧表 結果図> 行 __A__ ____B____ ____C____ ___D___ __E__ 1 番号 従業員ID 氏名 住所 TELL 2 1 1 山田太郎 東京都 80 3 2 2 佐藤太 埼玉県 9999 ←電話番号変更 4 3 3 蜷川一郎 東京都 80 5 4 4 飯沼博美 新潟県 90 6 5 5 藤堂太郎 埼玉県 70 7 6 6 高橋勉 新潟県 90 ←新規
Sub test2() Dim wsI Dim wsN
Dim i As Long Dim lastRow As Long Dim PasteNo As Variant
Set wsN = Worksheets("入力") Set wsI = Worksheets("一覧表")
For i = 2 To wsN.Cells(wsN.Rows.Count, 1).End(xlUp).Row If wsN.Cells(i, "A").Value = "" Then Exit Sub Else PasteNo = Application.Match(wsN.Cells(i, "A").Value, wsI.Columns(1), 0)
If IsNumeric(PasteNo) Then '該当あり wsN.Range("A" & i).Resize(1, 5).Copy wsI.Cells(PasteNo, "A") Else '要追記 lastRow = wsI.Cells(Rows.Count, 1).End(xlUp).Row wsN.Range("A" & i).Resize(1, 5).Copy wsI.Cells(lastRow + 1, "A") End If
End If Next i
End Sub
(半平太) 2015/06/20(土) 17:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.