Excel VBA質問箱 IV

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

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


2725 / 13645 ツリー ←次へ | 前へ→

【66342】値複写について もうすぐ??歳 10/8/24(火) 9:23 質問[未読]
【66343】Re:値複写について kanabun 10/8/24(火) 9:53 発言[未読]
【66344】Re:値複写について kanabun 10/8/24(火) 9:55 発言[未読]
【66345】Re:値複写について もうすぐ??歳 10/8/24(火) 11:55 質問[未読]
【66346】Re:値複写について かみちゃん 10/8/24(火) 12:58 発言[未読]
【66351】Re:値複写について もうすぐ??歳 10/8/25(水) 11:07 質問[未読]
【66352】Re:値複写について かみちゃん 10/8/25(水) 13:05 発言[未読]
【66353】Re:値複写について Yuki 10/8/25(水) 14:19 発言[未読]
【66356】Re:値複写について kanabun 10/8/25(水) 22:40 発言[未読]
【66375】Re:値複写について もうすぐ??歳 10/8/30(月) 8:36 お礼[未読]

【66342】値複写について
質問  もうすぐ??歳  - 10/8/24(火) 9:23 -

引用なし
パスワード
   たぶん 初歩的な事だと思うのですが、sheet1のJ10〜J90まで、計算式があり、元データを更新するとJ10〜J90が更新されます。この値をG10〜G90まで 値複写をしたいのです。値複写で検索してみましたが、ほしいvbaに出会えなかったので、質問致します。それらしきものをつぎはぎで作ってみましたが、全く動く気配がありません。よろしくご教授ねがいます。
Private Sub workisheet_Change(ByValTarget As Range)
Dim r As Range
With Me.Range("N10:N95")
Me.Range("N10:N95").Value = r.Value
Set r = .Offset(, -7)
End With
End Sub

【66343】Re:値複写について
発言  kanabun  - 10/8/24(火) 9:53 -

引用なし
パスワード
   ▼もうすぐ??歳 さん:
こんにちは。(60)歳さん ??

>たぶん 初歩的な事だと思うのですが、sheet1のJ10〜J90まで、計算式があり、元データを更新するとJ10〜J90が更新されます。この値をG10〜G90まで 値複写をしたいのです。

ワークシートChangeイベントはセルが編集されたときに発生します。
再計算では発生しない、と一応考えておきましょう。

セル関係がよく分かりませんが、
Changeイベントを使うなら、
「元データを更新する」際に発生するChangeイベントを利用するようにします。
元データ範囲は どの列ですか?

また、Changeイベントプロシージャのなかでセルの値を書き換えると
ふたたびChangeイベントが発生するので、
  Application.EnableEvents = False
で、イベント発生を抑止しておいてから値変更し、処理がおわったら
すぐ
  Application.EnableEvents = False
と元に戻す用にしておいてください。


値複写のほうは
[G10:G90].Value = [J10:J90].Value
とかでどうですか?

【66344】Re:値複写について
発言  kanabun  - 10/8/24(火) 9:55 -

引用なし
パスワード
   ↑文章の間違い

すぐ
  Application.EnableEvents = TRUE
と元に戻すようにしておいてください。

【66345】Re:値複写について
質問  もうすぐ??歳  - 10/8/24(火) 11:55 -

引用なし
パスワード
   ▼kanabun さん:
>▼もうすぐ??歳 さん:
>こんにちは。(60)歳さん ??

もうすぐは63歳です。

>
>>たぶん 初歩的な事だと思うのですが、sheet1のJ10〜J90まで、計算式があり、元データを更新するとJ10〜J90が更新されます。この値をG10〜G90まで 値複写をしたいのです。
>
>ワークシートChangeイベントはセルが編集されたときに発生します。
>再計算では発生しない、と一応考えておきましょう。
>
>セル関係がよく分かりませんが、
>Changeイベントを使うなら、
>「元データを更新する」際に発生するChangeイベントを利用するようにします。
>元データ範囲は どの列ですか?
>
>元データはsheet2に各月の累計が入っており、Oの10〜Oの90に前月分までの累計が出るようになっており、jの10〜90に今月までの累計が出ます。そしてj10〜90にその差額(今月分)が計算式で出ます。E2に処理月があり、そこへ入力すると、該当月のデータが表示されるようになっています。つまりE2に数字を入力してリターンするとChangeイベントを使うようにしたいのです。
この説明では なおややこしいでしょうが、なんとか理解願います。
よろしくお願いします。

【66346】Re:値複写について
発言  かみちゃん E-MAIL  - 10/8/24(火) 12:58 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>> こんにちは。(60)歳さん ??

なぜ、kanabunさんは、このようにご挨拶されたのかわかりませんが、

> Sheet1のJ10〜J90まで、計算式があり、元データを更新するとJ10〜J90が更新されます。
> この値をG10〜G90まで 値複写をしたいのです。
>
> 元データはsheet2に各月の累計が入っており、Oの10〜Oの90に前月分までの累計が出るようになっており、
> jの10〜90に今月までの累計が出ます。
> そしてj10〜90にその差額(今月分)が計算式で出ます。
> E2に処理月があり、そこへ入力すると、
> 該当月のデータが表示されるようになっています。

ということなのですが、
kanabunさんもおっしゃっているのですが、
セル関係がよく分かりません。

以下のような感じでご説明いただけませんか?
Sheet1
   A  B  C  D  E  F
1
2          ★
3
4

Sheet2
   A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P
1
2         
:
10
11
12
:

もしかして、
★の部分に月を入れたら、
Sheet1のJ10:J90の値をSheet1のG1:G90に転記したいということですか?

それであれば、Sheet1のモジュールに以下のように記述します。

Private Sub workisheet_Change(ByVal Target As Range)
 Dim r As Range
 If Intersect(Target, Range("E2")) Is Nothing Then Exit Sub
 Application.EnableEvents = False
 With Range("G10:G90")
  .Value = .Offset(, -3).Value
 End With
 Application.EnableEvents = True
End Sub

ByVal と Target の間には、半角スペースが必要です。

【66351】Re:値複写について
質問  もうすぐ??歳  - 10/8/25(水) 11:07 -

引用なし
パスワード
   >かみちゃんさん


>セル関係がよく分かりません。
>
>以下のような感じでご説明いただけませんか?
>Sheet1
>   A B C D E F G H I J ・・           N  o
> 1
> 2       12     ↓
> 3                   
> 4             22(10月〜12月合計)  +J4-O4  14(10月〜11月合計)

ややこしいけど四捨五入の関係でどうしてもこの計算式で、N列の値をG列に値複写したいのです。

>
>Sheet2
>   A  B  C  D  E   F   G   H  I  J  K  L  M  N  O  P

> 1
> 2        10月 11月 12月 1月

>10         5   9   8
>11
>12
>13
> :
>
>もしかして、
>1★の部分に12を入れたら、
>Sheet1のJ列に:J90の値をSheet1のG1:G90に転記したいということですか?
>


その2

>それであれば、Sheet1のモジュールに以下のように記述します。
>
>Private Sub workisheet_Change(ByVal Target As Range)
> Dim r As Range
> If Intersect(Target, Range("E2")) Is Nothing Then Exit Sub
> Application.EnableEvents = False
> With Range("G10:G90")
>  .Value = .Offset(, -3).Value
> End With
> Application.EnableEvents = True
>End Sub
>
>ByVal と Target の間には、半角スペースが必要です。
と教えていただいたので、G10:G90をN10:N90に置き換えて.Value = .Offset(, -3).Valueを.Value = .Offset(, -7).Valueに置き換えてやってみるとN列のデータが消えてしまします。理由はありますか。

【66352】Re:値複写について
発言  かみちゃん E-MAIL  - 10/8/25(水) 13:05 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> N列の値をG列に値複写したい

のであれば、

> G10:G90をN10:N90に置き換えて.Value = .Offset(, -3).Valueを
> .Value = .Offset(, -7).Valueに置き換えてやってみるとN列のデータが
> 消えてしまします

これですと、
G10:G90の値をN10:N90に転記しています。
つまり、逆かと思います。

私が提案したコードをベースにすると、
 With Range("G10:G90")
  .Value = .Offset(, 7).Value
 End With
とするか、
 With Range("N10:N90")
  .Offset(, -7).Value = .Value
 End With
としないといけないと思います。

【66353】Re:値複写について
発言  Yuki  - 10/8/25(水) 14:19 -

引用なし
パスワード
   ▼もうすぐ??歳 さん:
>たぶん 初歩的な事だと思うのですが、sheet1のJ10〜J90まで、計算式があり、
>元データを更新するとJ10〜J90が更新されます。この値をG10〜G90まで 値複写
>をしたいのです。

コピーする範囲を指定してコピーしてから
コピー先をクリックして
形式を選択して貼り付け 値 を選択でOKをクリック
これをマクロの記録でコードを取得してアレンジ
でどうでしょう。
意味が違っていたら読み飛ばして下さい。

【66356】Re:値複写について
発言  kanabun  - 10/8/25(水) 22:40 -

引用なし
パスワード
   また、おじゃまします。

> sheet1のJ10〜J90まで、計算式があり、
> 元データを更新するとJ10〜J90が更新されます。
> この値をG10〜G90まで 値複写をしたいのです。
[J10:J90]を[G10:G90]に値複写したい ---- これは分かりました。

「いつ」コピーするかですが、
  [J10:J90]が再計算されたとき
ではなく
> E2に数字を入力してリターンする
とき、ということでいいですか?

それなら、Sheet1のChangeイベントでOKなんじゃないですか?

すでに他の方からコード例が提示されてますが、

Private Sub workisheet_Change(ByVal Target As Range)
 If Target.Address(0,0) = "E2" then
   Application.enableevents = false
   [G10:G90].Value = [J10:J90].Value
   Application.enableevents = true
 End If
End Sub

【66375】Re:値複写について
お礼  もうすぐ??歳  - 10/8/30(月) 8:36 -

引用なし
パスワード
   ▼kanabun さん:
>かみちゃんさん
YUKIさん
ありがとうございました。休みの間に全部試してみました。もう少し基礎から勉強します。助かりました。ありがとうございました。

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