[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルの列選択移動』(あらじぃ)
2つのシート間で複数列/複数行のデータ移動をする際に、効率良く移動する方法を探しています。作業としては単純で、すべて追記だけです。
問題は、2つのシートで列の名前が位置も含めて交錯していることです。
仮に親表(転記先)には左列からA/B/C/D/E/F/G という列項目名で、
転記元は左からA/F/C/Bという列項目名だった場合、
もし転記元が10行あったら、
転記元Aの10セル分を転記先のA列の一番下空欄にマウスでCUT&PASTE
転記元Fの10セル分を転記先のF列の一番下空欄にマウスでCUT&PASTE
転記元Cの10セル分を転記先のC列の一番下空欄にマウスでCUT&PASTE
転記元Bの10セル分を転記先のB列の一番下空欄にマウスでCUT&PASTE
というやぼったいことをしなければなりません。
実際には親表には20程度の列、転記元には6列あるので、毎回手動では作業効率が悪くてしかたがないです。
何か良い方法はないものでしょうか。
すいません、これで伝わらなけば例を書きます。
< 使用 Excel:Office365、使用 OS:Windows10 >
転記元の空いている列に、親表の列順で元表から参照したデータ範囲を作っておいたらいいのでは? (コナミ) 2019/03/13(水) 16:51
親表の構成がわかりません。 計算式等入っていなければ、コナミさんのおっしゃる通り、矩形範囲コピーで済むと思います。 それでも何とかしたいなら、マクロの記録ほとんど実現できると思うのですか・・・ (稲葉) 2019/03/14(木) 08:35
2つのシートにキー列を追加し、キーを入力したらマスターからデータを引っ張ってくるようにVLOOKUP,MATCHかINDEX,MATCH,MATCHで数式を組む
CUT&PASTEなんて必要ありません。
これが一般的なエクセルの使い方です。
(ななし) 2019/03/14(木) 08:46
転記元がA/F/C/B 転記先(親表)がA/B/C/D/E/F/G
だったら転記元を A/B/C/空白列2列/F
となるように参照列を作成しておき、それを一度にコピーしてから 転記先に形式を選択して貼り付け→空白セルを無視するにチェックをいれてから貼り付け (式が入っているなら値貼り付けとか?)にすればいいのでは? 具体的な内容がわからないのでこちらも勘でしか回答できませんからぼやっとしてますけど。 (コナミ) 2019/03/14(木) 10:06
面倒な作業は、マクロにやらせちゃいましょう。 Dictionaryオブジェクトを利用し、項目名が何列目にあるかを格納すれば、短くコーディングできますよ。
Sub test() Dim DIC1 As Object Dim DIC2 As Object Dim wk1 As Worksheet Dim wk2 As Worksheet Dim i As Long Dim iR As Long Dim iMax As Long
Set DIC1 = CreateObject("Scripting.Dictionary") Set DIC2 = CreateObject("Scripting.Dictionary") Set wk1 = Sheets("Sheet1") Set wk2 = Sheets("Sheet2")
For i = 1 To wk1.Cells(1, wk1.Columns.Count).End(xlToLeft).Column If wk1.Cells(1, i).Value <> "" Then DIC1.Add wk1.Cells(1, i).Value, i End If Next i For i = 1 To wk2.Cells(1, wk2.Columns.Count).End(xlToLeft).Column If wk2.Cells(1, i).Value <> "" Then DIC2.Add wk2.Cells(1, i).Value, i End If Next i
iMax = wk1.Cells(wk1.Rows.Count, "A").End(xlUp).Row iR = wk2.Cells(wk2.Rows.Count, "A").End(xlUp).Row + 1
For i = 0 To DIC1.Count - 1 If DIC2.exists(DIC1.keys()(i)) = True Then wk1.Range(wk1.Cells(2, DIC1.Items()(i)), wk1.Cells(iMax, DIC1.Items()(i))).Cut (wk2.Cells(iR, DIC2(DIC1.keys()(i)))) End If Next i End Sub (???) 2019/03/14(木) 10:36
ひょっとして、貼りつける行番号は一緒じゃないのかな? (コナミ) 2019/03/14(木) 11:10
[親表]
あ い う え お 1 10 30 10 40 10 2 50 40 50 50 30 3 20 50 20 30 10 4 20 30 20 10 50
[転記元]
え あ お い 1 11 12 13 14 2 21 22 23 24 3 31 32 33 34
[親表に追記後](つまりできあがり)
あ い う え お 1 10 30 10 40 10 2 50 40 50 50 30 3 20 50 20 30 10 4 20 30 20 10 50 5 12 14 11 13 6 22 24 21 23 7 32 34 31 33
こんな例で伝わりますか?
(あらじぃ) 2019/03/15(金) 19:16
こんばんは!
数式を書くよりコピーした方が早いかもしれませんが、、一応、、、
=IFERROR(INDEX(転記元!$A$2:$D$4,ROW(A1),MATCH(A$1,転記元!$A$1:$D$1,0)),"") (SoulMan) 2019/03/15(金) 21:30
完全手動で行う場合は、
1.転記元シートをコピー
2.白紙のシートに貼り付け
3.白紙のシートで列の順番が親シートと同じ順番になるように並び替え
4.必要な行をコピー
5.親シートに貼り付け
でよく行います。
1〜3を自動記録すれば、若干の手直しで自動化マクロが完成します。
(ななし) 2019/03/16(土) 09:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.