Excel VBA質問箱 IV

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

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


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

【36116】構文を簡素にする ゆか 06/3/21(火) 18:06 質問[未読]
【36119】Re:構文を簡素にする かみちゃん 06/3/21(火) 18:20 回答[未読]
【36120】Re:構文を簡素にする ponpon 06/3/21(火) 18:21 発言[未読]
【36122】Re:構文を簡素にする ゆか 06/3/21(火) 18:52 質問[未読]
【36123】Re:構文を簡素にする かみちゃん 06/3/21(火) 18:57 回答[未読]
【36125】Re:構文を簡素にする ゆか 06/3/21(火) 19:34 お礼[未読]
【36126】Re:構文を簡素にする かみちゃん 06/3/21(火) 19:40 発言[未読]
【36130】Re:構文を簡素にする ゆか 06/3/21(火) 20:44 お礼[未読]
【36131】Re:構文を簡素にする かみちゃん 06/3/21(火) 20:59 発言[未読]
【36133】Re:構文を簡素にする ponpon 06/3/21(火) 21:49 発言[未読]
【36138】Re:構文を簡素にする Jaka 06/3/22(水) 11:53 発言[未読]

【36116】構文を簡素にする
質問  ゆか  - 06/3/21(火) 18:06 -

引用なし
パスワード
   エクセル初心者です。以下の構文を簡単にする方法があれば教えて下さい。宜しくお願いします。

If Range("A10") = "I-1" Then
Range("H10").Select
    Selection.Copy
    Sheets("Products").Select
    Range("F3").Select
    Selection.PasteSpecial Paste:=xlValues
End If
If Range("A10") = "I-2" Then
 Range("H10").Select
    Selection.Copy
    Sheets("Products").Select
    Range("F4").Select
    Selection.PasteSpecial Paste:=xlValues
End If
If Range("A10") = "I-3" Then
 Range("H10").Select
    Selection.Copy
    Sheets("Products").Select
    Range("F5").Select
    Selection.PasteSpecial Paste:=xlValues
End If
If Range("A10") = "I-4" Then
 Range("H10").Select
    Selection.Copy
    Sheets("Products").Select
    Range("F6").Select
    Selection.PasteSpecial Paste:=xlValues
End If
 If Range("A10") = "I-5" Then
 Range("H10").Select
    Selection.Copy
    Sheets("Products").Select
    Range("F7").Select
    Selection.PasteSpecial Paste:=xlValues
End If

【36119】Re:構文を簡素にする
回答  かみちゃん E-MAIL  - 06/3/21(火) 18:20 -

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

> 以下の構文を簡単にする方法

仕様の説明が一切にいので、よくわかりませんが、以下のような感じでいいと思います。
詳細は、ヘルプを調べてみて、どうしてもわからなければ、聞いてください。

Sub Test()
 Dim PasteRange As Range
 
 Set PasteRange = Nothing
 With Sheets("Products")
  Select Case Range("A10").Value
   Case "I-1"
    Set PasteRange = .Range("F3")
   Case "I-2"
    Set PasteRange = .Range("F4")
   Case "I-3"
    Set PasteRange = .Range("F5")
   Case "I-4"
    Set PasteRange = .Range("F6")
   Case "I-5"
    Set PasteRange = .Range("F7")
  End Select
 End With
 If Not PasteRange Is Nothing Then
  PasteRange.Value = Range("H10").Value
 Else
  MsgBox "A10セルの値を確認してください。[" & Range("A10").Value & "]"
 End If
End Sub

【36120】Re:構文を簡素にする
発言  ponpon  - 06/3/21(火) 18:21 -

引用なし
パスワード
   もっといい方法があるかもしれません。
Select Caseで分けるなど・・・


  Dim i As Integer
  For i = 1 To 5
   If Range("A10").Value = "I-" & i Then
    Sheets("Products").Range("F" & i + 2).Value = Range("H10").Value
    Exit For
   End If
  Next

【36122】Re:構文を簡素にする
質問  ゆか  - 06/3/21(火) 18:52 -

引用なし
パスワード
   ありがとうございました。もう1点質問があるのですが、、、

Dim i As Integer
  For i = 1 To 10
  If Range("A10").Value = "I-" & i Then
  Sheets("Products").Range("E" & i + 2).Value = Range("H10").Value
  Exit For
  End If
  Next

のあとに、
If Range("A11").Value = "I-" & i
ThenSheets("Products").Range("E" & i + 2).Value = Range("H10").Value

これをA18まで繰り返したいのですがどうすればいいのでしょうか?宜しくお願いします。

【36123】Re:構文を簡素にする
回答  かみちゃん  - 06/3/21(火) 18:57 -

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

>これをA18まで繰り返したい

以下のような感じになります。

 Dim i As Integer
 Dim ii As Integer
  
 For ii = 10 To 18
  For i = 1 To 10
   If Range("A" & ii).Value = "I-" & i Then
    Sheets("Products").Range("E" & i + 2).Value = Range("H10").Value
    Exit For
   End If
  Next
 Next

For 〜 Next をよく調べてみてください。

【36125】Re:構文を簡素にする
お礼  ゆか  - 06/3/21(火) 19:34 -

引用なし
パスワード
   お礼が遅くなってしまいました。
Dim i As Integer
Dim ii As Integer
 
For ii = 10 To 17
 For i = 1 To 10
  If Range("A" & ii).Value = "I-" & i Then
  Sheets("Products").Range("E" & i + 2).Value = Range("H" & ii).Value
  Exit For
  End If
 Next
Next
End Sub
以下で解答することができました。ありがとうございます。

【36126】Re:構文を簡素にする
発言  かみちゃん  - 06/3/21(火) 19:40 -

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

>以下で解答することができました。

もしかして、何かの課題だったのですか?
ゆかさんがどうしたいなどという仕様提示がなかったので、不思議だったのですが・・・

揚げ足取りな発言でしたら、お許しください。
※何かの課題であれば、今後ご質問される場合は、正直にそのように書いていた
 だけると、もう少し付加した情報が得られるかもしれませんよ。
 「課題だと答えない」という方々も大勢いるのですが・・・

【36130】Re:構文を簡素にする
お礼  ゆか  - 06/3/21(火) 20:44 -

引用なし
パスワード
   かみちゃんへ、

只今大学へ通っています。VBAを2月より習い始め、授業では簡単な構文しか教わらないのに、提出しなければならない宿題はなぜか難問ばかりで困っていたのです(現在も困っているのですが、、)
頂いたヒントで自分なりに考えて解くことができましたので、感謝してます。
今後も宜しくお願いします。

ゆか

【36131】Re:構文を簡素にする
発言  かみちゃん E-MAIL  - 06/3/21(火) 20:59 -

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

>只今大学へ通っています。VBAを2月より習い始め、授業では簡単な構文しか教わらないのに、提出しなければならない宿題はなぜか難問ばかりで困っていたのです(現在も困っているのですが、、)
>頂いたヒントで自分なりに考えて解くことができましたので、感謝してます。
>今後も宜しくお願いします。

事情よくわかりました。
「マクロの記録」、ヘルプ、過去ログ検索機能など、参考になる情報はいろいろと
ありますので、それらも参考にしてみて、がんばってください。
どうしてもわからなければ、また質問してください。

【36133】Re:構文を簡素にする
発言  ponpon  - 06/3/21(火) 21:49 -

引用なし
パスワード
   ▼ゆか さん、かみちゃん さん:
こんばんは。

>只今大学へ通っています。VBAを2月より習い始め、授業では簡単な構文しか教わらないのに、提出しなければならない宿題はなぜか難問ばかりで困っていたのです(現在も困っているのですが、、)

こういうことであるなら、もっと違った回答の仕方が、ありました。
こういう事情は、はじめに断った方がよいと思います。

かみちゃん さんもおっしゃってますが、
>「マクロの記録」、ヘルプ、過去ログ検索
などを利用することも考えた方がよいと思いますが。

【36138】Re:構文を簡素にする
発言  Jaka  - 06/3/22(水) 11:53 -

引用なし
パスワード
   18回繰り返すとか考えてないけど...。
こんな感じでいいんじゃないですか?
規則性ある見たいだし....。
↓のまんまだとI-10は、NGです。I-1ケタだけ。その他エラー処理無し。

If Range("A10").Value Like "I-?" Then
  No = Mid(Range("A10").Value, 3)
  Sheets("Products").Range("F" & No + 2).Value = Range("H10").Value
End If

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