Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6793 / 13646 ツリー ←次へ | 前へ→

【43060】シート間のセル値のコピーについて タツヤ 06/10/1(日) 3:46 質問[未読]
【43061】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 8:02 発言[未読]
【43071】Re:シート間のセル値のコピーについて タツヤ 06/10/1(日) 12:27 発言[未読]
【43072】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 12:54 発言[未読]
【43077】Re:シート間のセル値のコピーについて タツヤ 06/10/1(日) 15:32 お礼[未読]
【43080】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 18:55 発言[未読]
【43081】Re:シート間のセル値のコピーについて タツヤ 06/10/1(日) 19:03 発言[未読]
【43083】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 20:02 発言[未読]
【43084】Re:シート間のセル値のコピーについて タツヤ 06/10/1(日) 20:43 発言[未読]
【43086】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 21:06 発言[未読]
【43089】Re:シート間のセル値のコピーについて タツヤ 06/10/1(日) 22:29 発言[未読]
【43090】Re:シート間のセル値のコピーについて ponpon 06/10/1(日) 23:13 発言[未読]
【43094】Re:シート間のセル値のコピーについて シンゴ 06/10/2(月) 9:28 発言[未読]
【43095】Re:シート間のセル値のコピーについて シンゴ 06/10/2(月) 9:57 発言[未読]
【43102】Re:シート間のセル値のコピーについて ponpon 06/10/2(月) 12:39 発言[未読]
【43106】Re:シート間のセル値のコピーについて タツヤ 06/10/2(月) 13:30 発言[未読]
【43107】Re:シート間のセル値のコピーについて ponpon 06/10/2(月) 13:43 発言[未読]
【43110】Re:シート間のセル値のコピーについて タツヤ 06/10/2(月) 15:09 お礼[未読]
【43121】Re:シート間のセル値のコピーについて ponpon 06/10/2(月) 22:19 発言[未読]

【43060】シート間のセル値のコピーについて
質問  タツヤ  - 06/10/1(日) 3:46 -

引用なし
パスワード
   お世話になります。
シート間のコピー時、コピー先の書式設定(条件付書式)を活かす為
(コピー元の書式設定はコピーしたくない)に下記のようなコードを
記述しましたが、うまく動作しません。
       ↓
Private Sub CommandButton1_Click()
If UserForm7.OptionButton1.Value = True Then
Dim コピー元 As Range
Dim コピー先 As Range
  元シート名 = "sheet1"
  セル範囲 = "C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349"
  新シート名 = "sheet2"
  With Worksheets("sheet1").Activate
  Set コピー元 = .Range("C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349")
End With
With Worksheets("sheet2").Activate
  Set コピー先 = .Range("C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349")
End With
  コピー先.Clear
  コピー先.Value = コピー元.Value

『オブジェクトが必要です。』と言うメッセージが表示され実行が
中断してしまいます。どこか記述に間違いがありますでしょうか?
宜しくお願い致します。

【43061】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 8:02 -

引用なし
パスワード
   ▼タツヤ さん:
>お世話になります。
>シート間のコピー時、コピー先の書式設定(条件付書式)を活かす為
>(コピー元の書式設定はコピーしたくない)に下記のようなコードを
>記述しましたが、うまく動作しません。
>       ↓
>Private Sub CommandButton1_Click()
>If UserForm7.OptionButton1.Value = True Then
>Dim コピー元 As Range
>Dim コピー先 As Range
>  元シート名 = "sheet1"
>  セル範囲 = "C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349"
>  新シート名 = "sheet2"
>  With Worksheets("sheet1").Activate
                    ~~~~~~~~~ いらない 
>  Set コピー元 = .Range("C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349")
>End With
>With Worksheets("sheet2").Activate
                  ~~~~~~~~~ いらない 
>  Set コピー先 = .Range("C10:Q349,S10:Z349,AB10:AD349,AG10:AN349,AU10:AX349")
>End With
>  コピー先.Clear
>  コピー先.Value = コピー元.Value
>

これで『オブジェクトが必要です。』
のエラーはなくなると思いますが、ちゃんと転記されないと思います。
それと、”元シート名”とか”セル範囲”とか”新シート名”とか使ってない変数がありますが・・・

私だったら、

Private Sub CommandButton1_Click()
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim myAry, r

  myAry = Array("C10:Q349", "S10:Z3492", "AB10:AD349", "AG10:AN349", "AU10:AX349")
  Set Sh1 = Sheets("Sheet1")
  Set Sh2 = Sheets("Sheet2")
  If UserForm7.OptionButton1.Value = True Then  
    For Each r In myAry
      Sh2.Range(r).Value = Sh1.Range(r).Value
    Next
  End if
End sub
とします。

【43071】Re:シート間のセル値のコピーについて
発言  タツヤ  - 06/10/1(日) 12:27 -

引用なし
パスワード
   ▼ponpon さん:
回答ありがとうございます。
提示頂いたコードは問題なく動くようですがコピーはされませんが...

【43072】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 12:54 -

引用なし
パスワード
   ▼タツヤ さん:
>▼ponpon さん:
>回答ありがとうございます。
>提示頂いたコードは問題なく動くようですがコピーはされませんが...

そうですか?
こちらでは、きちんと転記されています。
間違いがありました。

>>  myAry = Array("C10:Q349", "S10:Z3492", "AB10:AD349", "AG10:AN349", "AU10:AX349")

  myAry = Array("C10:Q349", "S10:Z349", "AB10:AD349", "AG10:AN349", "AU10:AX349")

【43077】Re:シート間のセル値のコピーについて
お礼  タツヤ  - 06/10/1(日) 15:32 -

引用なし
パスワード
   ▼ponpon さん:

すみません,私の記述間違いでした。うまくいきました。
ありがとうございます。
但し、ただ1点のみ課題が残っています。
転写するデータには日付データがあります。

転写元日付データ→H18.3.15

これを先ほどのコードで転写すると転写先では→3/15/2006
になってしまいます。転写先の書式を設定しなおしても関係がないので
おそらくコードによるデータ転写順が関係している?

【43080】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 18:55 -

引用なし
パスワード
   どの範囲が日付データでしょうか?
具体的に範囲がわかれば、出来るかもしれません。

【43081】Re:シート間のセル値のコピーについて
発言  タツヤ  - 06/10/1(日) 19:03 -

引用なし
パスワード
   ▼ponpon さん:
すみません、たびたび.....
P10:Q349の範囲が日付データです。

【43083】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 20:02 -

引用なし
パスワード
   >Private Sub CommandButton1_Click()
>  Dim Sh1 As Worksheet, Sh2 As Worksheet
>  Dim myAry, r
>
>  myAry = Array("C10:Q349", "S10:Z349", "AB10:AD349", "AG10:AN349", "AU10:AX349")
>  Set Sh1 = Sheets("Sheet1")
>  Set Sh2 = Sheets("Sheet2")
>  If UserForm7.OptionButton1.Value = True Then  
>    For Each r In myAry
>      Sh2.Range(r).Value = Sh1.Range(r).Value
>    Next
  Sh2.Range("P10:Q349").NumberFormatLocal = "[$-411]ge.m.d;@" '★追加です
>  End if
>End sub

【43084】Re:シート間のセル値のコピーについて
発言  タツヤ  - 06/10/1(日) 20:43 -

引用なし
パスワード
   ▼ponpon さん

>Sh2.Range("P10:Q349").NumberFormatLocal = "[$-411]ge.m.d;@" 

追加しましたが駄目なようです。

【43086】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 21:06 -

引用なし
パスワード
   >追加しましたが駄目なようです。

とは、具体的にどうダメなのでしょうか?
駄目なようです。だけでは、対応のしようがありません。
"H18.3.15"とならず、"3/15/2006"となるのでしょうか?
こちらでは、P10:Q349の範囲は、"H18.3.15"と表示されています。
P10:Q349の範囲の書式設定→表示形式はどのようになっていますか?

【43089】Re:シート間のセル値のコピーについて
発言  タツヤ  - 06/10/1(日) 22:29 -

引用なし
パスワード
   ▼ponpon さん:
▼ponpon さん:

説明不足ですみません。

"H18.3.15"とはならず、"3/15/2006"となってしまいます。

P10:Q349の範囲の書式設定は、
分類→日付
種類→H13.3.14
となっています。

書式設定は何度変更しても結果は変わっていません。
他のコードが関係しているでしょうか?
ですが,転写自体は成功していますし....
記述コードは、
  ↓
Private Sub CommandButton1_Click()
UserForm4.Hide
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim myAry, r
myAry = Array("C10:Q349", "S10:Z349", "AB10:AD349", "AG10:AN349", "AU10:AX349")
Set Sh1 = Sheets("あいうえお")
Set Sh2 = Sheets("かきくけこ")
If UserForm7.OptionButton1.Value = True Then
For Each r In myAry
Sh2.Range(r).Value = Sh1.Range(r).Value
Next
Sh2.Range("O10:Q349").NumberFormatLocal = "[$-411]ge.m.d;@"
End If
UserForm16.Show
End
End Sub

ですが....

【43090】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/1(日) 23:13 -

引用なし
パスワード
   ▼タツヤ さん:

>
>P10:Q349の範囲の書式設定は、
>分類→日付
>種類→H13.3.14

となっているのに

>"H18.3.15"とはならず、"3/15/2006"となってしまいます。

????

こちらでは、標準の場合は、"2006/3/15"となり、

分類→日付 種類→H13.3.14の場合は、"H18.3.15" となります。

元データはシリアルで入ってますよね?

以下ではどうでしょう

    ----------------------------------------
    Dim c As Range '追加
  ----------------------------------------------
  -----------------------------------------------
    For Each r In myAry
        Sh2.Range(r).Value = Sh1.Range(r).Value
    Next
    For Each c In Sh2.Range("P10:Q349")       '変更
      If Not IsEmpty(c.Value) Then        '変更
       c.Value = Format(CDate(c.Value), "ge.m.d") '変更
      End If                   '変更
    Next                       '変更

【43094】Re:シート間のセル値のコピーについて
発言  シンゴ  - 06/10/2(月) 9:28 -

引用なし
パスワード
   ▼ponpon さん:
返答遅れましてすみません・

>元データはシリアルで入ってますよね?
        ↓
転写元のデータはあくまてでも"H18.3.15"です。
シリアルでは入っていません。
今までのコードはシリアル値の転写が前提となっている
と言う事でしょうか?

【43095】Re:シート間のセル値のコピーについて
発言  シンゴ  - 06/10/2(月) 9:57 -

引用なし
パスワード
   ▼ponpon さん:
度々すみません。
   ↓
>以下ではどうでしょう
>
>    ----------------------------------------
>    Dim c As Range '追加
>  ----------------------------------------------
>  -----------------------------------------------
>    For Each r In myAry
>        Sh2.Range(r).Value = Sh1.Range(r).Value
>    Next
>    For Each c In Sh2.Range("P10:Q349")       '変更
>      If Not IsEmpty(c.Value) Then        '変更
>       c.Value = Format(CDate(c.Value), "ge.m.d") '変更
>      End If                   '変更
>    Next                       '変更
    ↓
これでうまく行きました。
が、転写先のセルには条件付書式設定で以下の設定をしています。
    ↓
sheet2のP10セル
セルの値が、次の値に等しくない=INDIRECT("'sheet1'!P"&ROW())
この時にフォントの色を赤で表示する。
    ↓
これは転写元のP10セルと転写先のP10セルを比較して転写
先P10の値(文字列であれ数値であれ)が転写元P10セルの
値と異なる場合に赤字で表示するよう設定したものです。
転写と表示はうまくいきましたが、転写後の日付が赤字で表示されて
しまいます。転写後は同じ日付なので、赤字では表示されないはずで
すが.....

ご提示頂いたコードの動きを見ていますと、転写の動きは、一旦シリ
アル値で転写し、H13.3.14に直しているように見えますが...
すみません、次から次へと...情報小出しにしてしまいまして....

【43102】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/2(月) 12:39 -

引用なし
パスワード
   ということは、
元データは、シリアルではなく、文字列として入力している十いうことですね。
それならば、
エクセル君が勝手に日付と判断して変更しないように
下のようにすれば、いかがでしょう?
ただし、これは、元データの表示設定が”文字列”となっていることが前提です。

Private Sub CommandButton1_Click()
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim myAry, r

  myAry = Array("C10:Q349", "S10:Z349", "AB10:AD349", "AG10:AN349", "AU10:AX349")
  Set Sh1 = Sheets("Sheet1")
  Set Sh2 = Sheets("Sheet2")
  If UserForm7.OptionButton1.Value = True Then
    Sh2.Range("P10:Q349").NumberFormatLocal = "@"  ’範囲を文字列に
    For Each r In myAry
      Sh2.Range(r).Value = Sh1.Range(r).Value
    Next
  End If
End Sub

【43106】Re:シート間のセル値のコピーについて
発言  タツヤ  - 06/10/2(月) 13:30 -

引用なし
パスワード
   ▼ponpon さん:
度々ありがとうございます。
ここでエラーが発生してしまいます。
        ↓
Sh2.Range("P10:Q349").NumberFormatLocal = "@" 
        ↓ 
実行時エラー1004 'RangeクラスのNumberFormat
Localプロパティを設定できません。

環境はExcel2002バージョン10.0ですが0....

【43107】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/2(月) 13:43 -

引用なし
パスワード
   ▼タツヤ さん:
>ここでエラーが発生してしまいます。
>        ↓
>Sh2.Range("P10:Q349").NumberFormatLocal = "@" 
>        ↓ 
>実行時エラー1004 'RangeクラスのNumberFormat
>Localプロパティを設定できません。
>
>環境はExcel2002バージョン10.0ですが0....

こちらでは、何のエラーもなく文字列で転記されています。
Excel2003ですけど・・・・・
バージョンの問題ではないと思いますが。
新規ブックに
Sub test()
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim myAry, r

  myAry = Array("C10:Q20", "S10:Z20")
  Set Sh1 = Sheets("Sheet1")
  Set Sh2 = Sheets("Sheet2")
 
'  If UserForm7.OptionButton1.Value = True Then
    Sh2.Range("P10:P20").NumberFormatLocal = "@"
    For Each r In myAry
      Sh2.Range(r).Value = Sh1.Range(r).Value
    Next
'  End If
End Sub

等として、P列を文字列にして、H15.3.14と入力以下コピー
して実行してみて下さい。
それで、転記されれば、別の問題だと思います。
昼休みが終了しましたので、後は夜になります。
私以外の、指揮者の回答をお待ち下さい。

【43110】Re:シート間のセル値のコピーについて
お礼  タツヤ  - 06/10/2(月) 15:09 -

引用なし
パスワード
   ▼ponpon さん:

2日間に渡ってご教示頂きまして大変ありがとうございました。
お蔭様で解決致しました。

原因はシートの保護時に書式設定までロック(保護)をかけていた事が
要因でした。
お手数おかけしました。

【43121】Re:シート間のセル値のコピーについて
発言  ponpon  - 06/10/2(月) 22:19 -

引用なし
パスワード
   ▼タツヤ さん:
もう見てないかと思いますが、気になったので。

>原因はシートの保護時に書式設定までロック(保護)をかけていた事が
>要因でした。
>お手数おかけしました。

無事解決して何よりですが、いろいろと情報が後から出てきました。

・日付データがあったこと
・シリアルでなく文字列だったこと
 (大文字だったので怪しいとは思っていましたが・・)
・条件付き書式のこと
・シートの保護をしていたこと。

他の板では、このようなことを"後出しじゃんけん"といい、きらわれ、めちゃくちゃに言われているのをよく目にします。

ここは、みんな優しく教えてくれるので安心ですが、
無駄なレスのやりとりが多くなります。

これからは、気をつけた方が良いと思います。
気分を害したのであれば、申し訳ありません。

ここを一読ください。
http://www.vbalab.net/bbspolicy.html

6793 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free