Excel VBA質問箱 IV

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

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


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

【75411】値の貼り付け方法 りんご 14/3/21(金) 16:21 質問[未読]
【75414】Re:値の貼り付け方法 マナ 14/3/21(金) 19:04 発言[未読]
【75417】Re:値の貼り付け方法 りんご 14/3/22(土) 9:25 質問[未読]
【75418】Re:値の貼り付け方法 マナ 14/3/22(土) 11:05 発言[未読]
【75419】Re:値の貼り付け方法 りんご 14/3/22(土) 15:36 お礼[未読]
【75420】Re:値の貼り付け方法 マナ 14/3/22(土) 17:20 発言[未読]
【75421】Re:値の貼り付け方法 りんご 14/3/23(日) 18:11 お礼[未読]
【75422】Re:値の貼り付け方法 マナ 14/3/23(日) 20:12 発言[未読]
【75438】Re:値の貼り付け方法(上位3位までのセル... りんご 14/3/26(水) 6:15 質問[未読]
【75439】Re:値の貼り付け方法(上位3位までのセル... マナ 14/3/26(水) 21:26 発言[未読]
【75440】Re:値の貼り付け方法(上位3位までのセル... りんご 14/3/27(木) 3:17 質問[未読]
【75441】Re:値の貼り付け方法(上位3位までのセル... マナ 14/3/27(木) 20:52 発言[未読]

【75411】値の貼り付け方法
質問  りんご E-MAIL  - 14/3/21(金) 16:21 -

引用なし
パスワード
    次のような張付マクロがあります。これを値で張付するにはどう書けばいい   でしょうか?初心者のためなかなか不明が多いです。詳しい方の御教示をお願い  します。


 ' Range("T6:Z400").AdvancedFilter Action:=xlFilterCopy,           CriteriaRange:=Range( _
    ' "gG1:gI2"), CopyToRange:=Range("B6:H35"), Unique:=False
    

【75414】Re:値の貼り付け方法
発言  マナ  - 14/3/21(金) 19:04 -

引用なし
パスワード
   AdvancedFilterメソッドで値のみを抽出するには?
ht tp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200907/09070111.txt

【75417】Re:値の貼り付け方法
質問  りんご  - 14/3/22(土) 9:25 -

引用なし
パスワード
   ▼マナ さん:
>AdvancedFilterメソッドで値のみを抽出するには?
>ht tp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200907/09070111.txt

ありがとうございます。早速

Range("T6:Z400").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"gG1:gI2"), CopyToRange:=Range("B6:H35"), Unique:=False


このように書き換えしました
range("T6:Z400") .advancedfilter action:=xlfilterinplace, unique:=true
range("T6:Z400") .copy.range( _
"gG1:gI2").pastespecial paste:=xlpastevalues
activesheet.showalldata

  構文エラーとなり、前に進めません。マクロ始めて3ケ月目です。なかなか理解が難しいので、再度ご指導願います。

【75418】Re:値の貼り付け方法
発言  マナ  - 14/3/22(土) 11:05 -

引用なし
パスワード
   今は、しっかりと基本的な構文をまず理解することが必要な気がします。

ht tp://www.happy2-island.com/excelsmile/smile03/capter00505.shtml
ht tp://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_advancedfilter.html

Range("B6;H400").ClearContents
Range("T6:Z400").AdvancedFilter _
  Action:=xlFilterInPlace, _
  CriteriaRange:=Range("GG1:GI2"), _
  Unique:=True
Range("T6:Z400").Copy
Range("B6").PasteSpecial Paste:=xlPasteValues
ActiveSheet.ShowAllData

【75419】Re:値の貼り付け方法
お礼  りんご  - 14/3/22(土) 15:36 -

引用なし
パスワード
   ありがとうございました。自分だけではなかなか解決できなくて困っていました。自己流で作った文は次のように活用させて頂きました。


 Sub 抽出月()
   
    Range("B7:R35").Select
    Selection.ClearContents
    Range("r4").Select
 
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Application.DisplayAlerts = False


    Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
     Unique:=True
    Range("T6:Z400").Copy
    Range("B6").PasteSpecial Paste:=xlPasteValues
    ActiveSheet.ShowAllData


     Range("B6:I35").Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlYes


     終行 = Range("b35").End(xlUp).Row
   
   For k = 7 To 終行
   
     Range("i7:i" & k & "").Formula = "=Sum(E7:H7)"
     Range("n7:n" & k & "").Value = Array("=ROUNDdown(E7/D7,1)")
     Range("o7:o" & k & "").Value = Array("=ROUNDdown(F7/D7,1)")
     Range("p7:p" & k & "").Value = Array("=ROUNDdown(G7/D7,1)")
     Range("q7:q" & k & "").Value = Array("=ROUNDdown(H7/D7,1)")
     Range("r7:r" & k & "").Value = Array("=ROUNDdown(I7/D7,1)")
  
       
     Range("b" & 終行 + 1 & ":i35") = ClearContents
     Range("K" & 終行 + 1 & ":R35") = ClearContents
     
     
     Range("b7", "d" & k & "").Copy
     Range("k7").PasteSpecial xlPasteValues
     Application.CutCopyMode = False
     Range("r4").Select
   
    Next k
  
  
  Application.DisplayAlerts = True
  Application.Calculation = xlCalculationAutomatic
  Application.Calculate
  Application.ScreenUpdating = True


End Sub
 

【75420】Re:値の貼り付け方法
発言  マナ  - 14/3/22(土) 17:20 -

引用なし
パスワード
   おそらく、こうでしょうか。

Option Explicit

Sub 抽出月()
  Dim 終行 As Long

  Application.ScreenUpdating = False

  Range("B7:R35").ClearContents

  Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
    Unique:=True
  Range("T6:Z400").Copy
  Range("B6").PasteSpecial Paste:=xlPasteValues
  ActiveSheet.ShowAllData
  
  終行 = Range("b36").End(xlUp).Row
  
  Range("B6:H" & 終行).Sort _
    Key1:=Range("B6"), _
    Order1:=xlAscending, _
    Header:=xlYes
  
  Range("i7:i" & 終行).Formula = "=Sum(E7:H7)"
  
  Range("n7:r" & 終行).FormulaR1C1 = "=ROUNDDOWN(RC[-9]/RC4,1)"
'  ↑がわかりにくければ、かわりに↓
'  Range("n7:n" & 終行).Formula = "=ROUNDdown(E7/D7,1)"
'  Range("o7:o" & 終行).Formula = "=ROUNDdown(F7/D7,1)"
'  Range("p7:p" & 終行).Formula = "=ROUNDdown(G7/D7,1)"
'  Range("q7:q" & 終行).Formula = "=ROUNDdown(H7/D7,1)"
'  Range("r7:r" & 終行).Formula = "=ROUNDdown(I7/D7,1)"
   
  Range("b7", "d" & 終行).Copy
  Range("k7").PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  
  Range("r4").Select
  Application.ScreenUpdating = True

End Sub

【75421】Re:値の貼り付け方法
お礼  りんご  - 14/3/23(日) 18:11 -

引用なし
パスワード
   ありがとうございました。早速利用させていただきたいと思います。お願いですが、フィルターデータがないときに、抽出マクロを実行したときのエラーを回避する方法を教えて頂けないでしょうか。

【75422】Re:値の貼り付け方法
発言  マナ  - 14/3/23(日) 20:12 -

引用なし
パスワード
   追加してみてください。

一番最初に:

If WorksheetFunction.CountBlank(Range("GG1:GI2")) > 0 Then
  MsgBox "抽出条件を設定して下さい"
  Exit Sub
End If

終行を求めた直後に:

If 終行 = 6 Then
  MsgBox "何も抽出されませんでした"
  Exit Sub
End If

【75438】Re:値の貼り付け方法(上位3位までのセ...
質問  りんご  - 14/3/26(水) 6:15 -

引用なし
パスワード
   ありがとうございました。感激です。利用させていただきます。
追加の質問になりますが、
   抽出データにより作成された N7:R31のデータに対し
   項目(key1=N6、key2=O6、key3=p6,、ey4=R6)の各列の第3位までのセルに   色をつける場合(できれば、colorindex3、33、36複雑になるときは1色)
各列に対し3個のlage式が必要ですか?それとも、データセルが3個以上の場合sortして色をつけ再度 日にちをkeyに並べ替えると考えるのでしょうか?
なかなか、理解できない初心者です。よろしくお願いします
ちなみに前回のマクロはこのように

Sub 抽出当月()
'
  Dim 終行 As Long
  Application.ScreenUpdating = False

 If WorksheetFunction.CountBlank(Range("H4:I4")) > 0 Then
  MsgBox "抽出期間を設定して下さい"
  Exit Sub
End If
  Range("B7:R31").ClearContents
  Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
    Unique:=True
  Range("T6:Z400").Copy
  Range("B6").PasteSpecial Paste:=xlPasteValues
  ActiveSheet.ShowAllData
    終行 = Range("b31").End(xlUp).Row
   If 終行 = 6 Then
   Range("b2").Select
  MsgBox "何も抽出されませんでした"
  Exit Sub
End If
  Range("B6:H" & 終行).Sort _
    Key1:=Range("B6"), _
    Order1:=xlAscending, _
    Header:=xlYes
 
  Range("i7:i" & 終行).Formula = "=Sum(E7:H7)"
 
  Range("n7:r" & 終行).FormulaR1C1 = "=IF(ISERROR(ROUNDDOWN(RC[-9]*1000/RC4,1)),0, ROUNDDOWN(RC[-9]*1000/RC4,1)) "

  Range("b7", "d" & 終行).Copy
  Range("k7").PasteSpecial xlPasteValues
  Application.CutCopyMode = False
    Range("r4").Select
  Application.ScreenUpdating = True

End Sub

【75439】Re:値の貼り付け方法(上位3位までのセ...
発言  マナ  - 14/3/26(水) 21:26 -

引用なし
パスワード
   ★ClearContentsする範囲を修正して再投稿

条件付き書式を予め設定しておけばよいと思います。
同様に、式も毎回マクロで設定しなくても良いです。
予め入力しておけば、終行を使わないで、コードも簡潔になります。

ところで抽出条件を入力するセルは"GG1:GI2"ではないのですか?

Sub 抽出当月()
 
  If WorksheetFunction.CountBlank(Range("GG1:GI2")) > 0 Then
    MsgBox "抽出期間を設定して下さい"
    Exit Sub
  End If
  
  Application.ScreenUpdating = False
  
  Range("B7:H31").ClearContents  '★

  Range("T6:Z400").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("GG1:GI2"), _
    Unique:=True
  Range("T6:Z400").Copy
  Range("B6").PasteSpecial Paste:=xlPasteValues
  ActiveSheet.ShowAllData

  If Range("B7") = "" Then
    Range("B2").Select
    MsgBox "何も抽出されませんでした"
    Exit Sub
  End If
  
  Range("B6:H31").Sort _
    Key1:=Range("B6"), _
    Order1:=xlAscending, _
    Header:=xlYes

  Range("R4").Select
  
  Application.ScreenUpdating = True

End Sub

【75440】Re:値の貼り付け方法(上位3位までのセ...
質問  りんご  - 14/3/27(木) 3:17 -

引用なし
パスワード
   ありがとうございました。
上位3位までの色付け完了しました。「条件付き書式を予め設定」の意味は
参照の値を計算するよう当該セルに条件書式に設定するの意味でしょうか?すみませんが、まだ試していないでの質問です。

>質問の後、若干変更がありました。
  >抽出条件を入力するセルは"GG1:GI2"は場所を変更しました。
  >人数あん分もキロからグラムで表示するよう変更しました 
  >計算エラー表示をゼロ値表示にしました IF(ISERR(
>追加の質問ですが、以前にご指導いただいたマクロですが、入力項目(R7:V23)に値がないときに処理を中断するつもりで、式を張付ましたがうまくいきません。 このやり方は何が問題なのでしょうか?
理解できていないのでよろしくお願いします。

Sub 残菜まとめて登録()

  Dim 登録 As Worksheet, 当月 As Worksheet
  Dim 月 As Long, 日 As Long
  Dim 縦 As Long, 最終行 As Long
  Dim msg As Long
  Dim 行 As Long
 
  Set 登録 = Worksheets("登録")
  月 = 登録.Cells(4, 18).Value
  日 = 登録.Cells(4, 20).Value
  
    If WorksheetFunction.CountBlank(Range("R7:V23")) > 0 Then
     MsgBox "登録データがありません"
     Exit Sub
    End If

  
  msg = MsgBox("入力内容を登録月" & 月 & "シートに転送します。" & vbCrLf & "よろしいですか?", vbOKCancel + vbExclamation, "入力内容の転送")
  If msg <> vbOK Then MsgBox "操作を中断しました": Exit Sub
 
  Set 当月 = Worksheets("登録月" & 月)
  縦 = 7
  Do Until 当月.Cells(縦, 20).Value = ""
    縦 = 縦 + 1
  Loop

  If WorksheetFunction.CountIf(当月.Range(当月.Cells(7, 20), 当月.Cells(縦, 20)), 日) >= 1 Then
    msg = MsgBox("この日付はすでに使用されています ", vbOKOnly + vbCritical)
    If msg = vbOK Then Exit Sub
  
  End If
      (以下 略)

【75441】Re:値の貼り付け方法(上位3位までのセ...
発言  マナ  - 14/3/27(木) 20:52 -

引用なし
パスワード
   ▼りんご さん:
>上位3位までの色付け完了しました。「条件付き書式を予め設定」の意味は
>参照の値を計算するよう当該セルに条件書式に設定するの意味でしょうか?

たぶん、それでよいと思います。
各列(N7:N31、O7:O31、P7:P31、Q7:Q31、R7:R31)に
条件付き書式を手操作で設定するということです。

計算式もI7:R31の範囲に手操作で入力してください。

データがない行は、計算結果を表示したくないなら、
例えば、こんな感じです。
I7には、=IF(B7="","",SUM(B7:H7))
K7には、=IF(B7="","",B7)

ただし、計算式が消えてはいけないので、
マクロでClearContentsするのは、B7:H31とします。


>>追加の質問ですが、以前にご指導いただいたマクロですが、入力項目(R7:V23)に値がないときに処理を中断するつもりで、式を張付ましたがうまくいきません。 このやり方は何が問題なのでしょうか?
>理解できていないのでよろしくお願いします。

もとのスレッドで返事します。

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