アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
別シートの文字を別シートに入力する際に空白のセルはそのまま空白にする処理についてご教示をお願い致します。
sheet1、C2からC11まで従業員の氏名が入力されております。
これをsheet2、B5からB14までコピーするプログラムをサイトを参考に作りました。
Sub test()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
sh2.Range("B5:B14").Value = sh1.Range("C2:C11").Value
End Sub

これで入力出来る様にはなったのですが、sheet2の従業員のセルを削除した際に、ここで同様にsheet1の従業員の氏名も消します。
このプログラムですとsheet2の氏名セルを削除致しますと下にある違うデータが入力されているセルが上に上がり上記のプログラムを実行しますと消したくないデータセルまで白くなってしまいます。
セルを結合しているセルなどがありそのセルがこの範囲に入ると白くなります。
上記のプログラムですと当然の結果だと思うのですが、これを消さない方法のプログラムを教えて欲しい内容になります。

よろしくお願い致します。

質問者からの補足コメント

  • 削除前の図になります。

    「VBAで別シートの文字を別シートにコピー」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2017/06/23 16:08
  • 従業員Dさん、Eさんセルを削除してもこの様にしたいです。

    「VBAで別シートの文字を別シートにコピー」の補足画像2
      補足日時:2017/06/23 16:09

A 回答 (4件)

実行行は以下で良いかと思います。


結構厄介ですが、上手く行くと思います。


'Sheet1のC2以下の有効最終行を求める
END11 = Sh1.Range("C2").End(xlDown).Row
'Sheet1のC2~有効最終行までの行数を求める
行数 = END11 - Sh1.Range("C2").Row + 1

'Sheet2のB5以降の有効最終行を求める
END21 = Sh2.Range("B5").End(xlDown).Row

'Sheet2のB5~有効最終行を一旦削除
Sh2.Range("5:" & END21).Delete

'Sheet2のB5以降に行を追加しながら転送

For i = 1 To 行数

Sh2.Range("B" & 5 + i - 1).EntireRow.Insert
Sh2.Range("B" & 5 + i - 1).Value = Sh1.Range("C" & 2 + i - 1).Value

Next i
    • good
    • 0
この回答へのお礼

t_fumiaki様ありがとうございます!
見事に出来ました。
活用させていただきます。

お礼日時:2017/06/23 22:00

>>Sh2.Range("B5:B14").Value = Sh1.Range("C2:C11").Value



B5:B14は範囲が変動する、と言う事ですか?
B5以下に、「Sheet1のC2以下の有効分」を詰めて並べたい訳ですか?
3個しか無かったら、Sheet2は「B5,B6,B7」に埋めたい?

つまり、下図の様にしたい???

もしそうなら、Sheet1のJさんより下は少なくとも1個は空白セルが無いと自動では上手く行きません。
Sheet1のC2:C11も変動する、と言ってる訳ですから・・・。
「VBAで別シートの文字を別シートにコピー」の回答画像3
    • good
    • 0
この回答へのお礼

そうですこの図の様にしたいです!
引継ぎ表のセルを消さない様なプログラムは構築可能なのでしょうか?

お礼日時:2017/06/23 18:57

やっぱり解りません。

どうしたいんだろう??です。

>>sheet2の従業員のセルを削除した際に、ここで同様にsheet1の従業員の氏名も消します。

ここに言いたい事が書いて有る、様な気もします。

>>sheet2の従業員のセルを削除した際
sheet2はセル削除、つまり行ごと削除するんですね?

>>同様にsheet1の従業員の氏名も消します。
sheet1は削除とか行ごと削除では無く、「従業員の氏名」をクリアするんですね??
Aさん、Bさん、Cさん、Dさん、Eさん、Fさん、Gさん、となってたら
Aさん、Bさん、Cさん、Dさん、ブランク、ブランク、Gさん、とする訳なんですか??

自分の思ってる事を正確に相手に伝えるのは、大変に難しいです。
でも、頑張って伝えて下さい。
    • good
    • 0
この回答へのお礼

言葉足らずなご説明で申し訳ございません。
再度細かく質問の内容を述べさせていただきます。

sheet1のC2からC11まではAさんからJさんが入力されております。
その従業員氏名データをsheet2のB5からB14まで出力致します。
ここでsheet2のEさん、Fさんセルを削除しsheet1の氏名セルのC6にGさん、C7にHさんとセルを上にずらしC2からC9にAさん、Bさん、Cさん、Dさん、Gさん、Hさん、Jさん、Iさんと入力をします。
ここでvbaを実行致しますとプログラムされておりますC2からC11のC10とC11のセルが空欄、またsheet2のB5からB14に下にある「引継ぎ表」のセルが上に上がる為、指定範囲と重なりセルの文字が消える問題が出ております。
当たり前の事なのですが。

この担当従業員が変わる際にVBAのプログラムの指定範囲を毎回毎回変えるのは大変なので入力されている文字のセルは消さない方法があればご教示をいただきたい質問になります。

よろしくお願い致します。

お礼日時:2017/06/23 17:35

セルを削除するのだから当然。


セルを削除したら、どうなって欲しいのか図示しないと解りません。

セル削除前、削除後の図
この回答への補足あり
    • good
    • 1
この回答へのお礼

t_fumiaki様回答ありがとうございます。
誠に申し訳ございません。
削除前と削除後の画像を添付致します。

従業員がAさんからJさんまでおります。
B16セルに引継ぎ表と書かれたセルがあります。
従業員のセルを削除しても引継ぎ表のセルは消さず残したままにしたい内容になります。

よろしくお願い致します。

お礼日時:2017/06/23 16:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!