1.
現在のワークシートのデータの掲載状態も参考までに提供いただけますでしょうか。
VBだけで推し量れない箇所も出てくるのでワークシートのどの座標にどんなデータがあるか知りたいです。
VBから読める範囲で勝手に組んでみますが異なると思いますのでこんな感じで掲載いただけますか。
ワークシート(Sheet1)
A B C … W
01 性 名 フラグ?
02 山田 太郎 1
03 山田 二郎
04 山田 三郎 1
05
///////////////////////////////////////////////////////
2.
セル=セルは可能です。
ワークシートA.Range("座標").Value = ワークシートB.Range("座標").Value
や
ワークシートA.Cells(x,y).Value = ワークシートB.Cells(x,y).Value
でセルの中の値のみ転記できます。
Ctrl + ALT + Vで貼り付けメニューから”値のみ貼り付け”をした際の挙動と同義です。
複数のセルの値を結合して挿入する場合、
ワークシートA.Cells(x,y).Value = ワークシートB.Cells(x,y).Value & ワークシートB.Cells(x + 1,y).Value
などで対応できます。
///////////////////////////////////////////////////////
3.
X軸方向(1件=1行)にあるデータをセル=セルで転記したい場合、Y軸に対するFor文の中にX軸に対するFor文を組むことで2方向(縦・横)のデータを処理できますが、転記先の座標が元のワークシートと相対的に全く同じではない場合、If ThenやSelect Case文で例外処理をするか、実際に転記する場合のデータ構造に変換したものをセル=セルで転記することが必要になります。
'最も単純な相対コピー(別のワークシートの同じ座標に同じ値を複製する方法)
For y = 2 to 4
For x = 1 to 23'W列までの場合
転記先ワークシート.Cells(y,x).Value = 元ワークシート.Cells(y,x).Value
Next x
Next y
'転記先の座標がセルごとに絶対座標で配置が順番ではなく、ぐちゃぐちゃな場合
'前提条件として元ワークシートの1行目各列に転記先ワークシートのどのセルに書き込むか、セル名(1列目はB11とか2列目C4とか)を書き込んで置く。
For y = 3 to 5'←対応させるために1行下げてます注意
For x = 1 to 22'V列までの場合
転記先ワークシート.Range(元ワークシート.Cells(1,x).Value).Value = 元ワークシート.Cells(y,x).Value
Next x
Next y
ワークシート(元ワークシート)
A B C … W
01 B11 C4
02 性 名 フラグ?
03 山田 太郎 1
04 山田 二郎
05 山田 三郎 1
06
///////////////////////////////////////////////////////
4.
W列をフラグとして利用したい場合以下のような書き方でいかがでしょうか
For y = 2 to 4
If(元ワークシート.Cells(y,23).Value = 1)Then 'またはCells(y,"W").Valueでも動作します
処理内容
End If
Next y
この場合、W列の各行が1の場合のみ処理します。
空白以外の何らかの文字が入っている場合に全部処理を行う場合は
If(元ワークシート.Cells(y,23).Value <> "")Then
で良いでしょうか。
///////////////////////////////////////////////////////
最後に
ここまで書いてアレですが、名前の姓名を結合したりする処理を行っているようですので、すべての転記をセル=セルで処理するのは不可能です。その列に対する例外処理が必要です。
If Then文やSelect Case文でxがn列目の時のみ、別処理と書いたり、
前述のFor x = 1 to 22部分の開始列・終了列をずらして単純なセル=セルの部分のみ処理し、そこ以外の例外部分は別途自力でコーディングする等の回避が必要です。
別のワークシートに実際に転記する値に加工したデータを1行分関数で結合してしまったデータを事前に作っておいてセル=セルで単純処理するなど何パターンか対応方法があります。VBで完結させるとメンテナンス地獄に陥ることもあるので(製作者が行方不明になったプログラムを誰がメンテできるのか?という問題)他に作業できる人がいないなら可能な限り別ワークシート上で転記するフォーマットへ変換したものをセル=セルで転記する方が安全です。
例えば1列目と2列目の姓名を半角スペースで結合し、末尾に”様”を結合したデータと、ファイル保存名用に”様”無し版をそれぞれエクセル関数で記述するなど。
別ワークシートに以下の記述をセル内に記述してみてください。
●適当なセルに(ここではA3セルあたりでどうか)
=CONCATENATE(OFFSET('元ワークシート'!A1,$B$1-1,0) ," ", OFFSET('元ワークシート'!B1,$B$1-1,0) , "様")
●B1セルに元ワークシートの何行目の案件を参照しているか数字を入力
↓
B1セルに2と入力すると
A3セルに「山田 太郎様」と生成されるはずです。