2016-11-30 5 views
0

最終的な目標は、ユーザーにドロップダウンリストから複製したい範囲を選択させ、「追加」ボタンをクリックすると、シート。VBA .range(「数式はここに入れることができますか?」)

私の範囲はWorkSheet_RangeNameの形式で名前が付けられています。たとえば、 "Oil Furnace"のセクションには、 "DataInput_OilFurnace"という名前のレンジがあります。したがって、すべての範囲は "DataInput_"で始まり、スペースを削除する必要があります。

Sub AddExtraSection() 

Dim copySheet As Worksheet 
Dim pasteSheet As Worksheet 
Dim addSection As Range 

Set copySheet = Worksheets("Data Input") 
Set pasteSheet = Worksheets("Add Extra Section") 
Set addSection = Worksheets("Add Extra Section").Range("C3").Formula = _ 
"=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" 

copySheet.range(addSection).Copy 
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial 

End Sub 

私は式を使用できない場合、私は範囲名が(のように、私は範囲の名前を移入し、私のドロップダウンの下式を有する)特定の細胞でも持つことができますか?

Set addSection = Worksheets("Add Extra Section").ActiveCell.Offset(1, 0).Formula = "=INDIRECT($C$4)" 

私はVBAにとって非常に新しく、このすべてが一緒に半分推測されたように見えます...それはそうです!ご協力ありがとうございました!

EDIT - 範囲a.k.a SOLUTION

が、その中に式を持つことができないと私は

Sub AddExtraSection() 

Dim copySheet As Worksheet 
Dim pasteSheet As Worksheet 
Dim addSection As range 

Set copySheet = Worksheets("Data Input") 
Set pasteSheet = Worksheets("Add Extra Section") 
Set addSection = copySheet.range("C3") 
addSection.Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!C3,"" "","""")" 

copySheet.range(addSection).Copy 
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial 

End Sub 
+2

文字列(「何か」) 'は、Excelがセルの範囲を参照するものとして理解できるものであればどれでもかまいません。「A1」、「A1:B12」、「$ A:$ B」、「SomeNamedRange」などです。しかし、いいえ、数式ではありません。 –

+0

Phooey。明確化のためにありがとう! – Haley

答えて

1

私のセットaddSectionを修正するために必要なあなたは、エラーを取得していますか?私はあなたのpasteSheet.Cells(...行がエラーを投げるかもしれないと思います。 .Cells()の前にシート名をどのように追加したかを確認してください。 Rows()Columns()でも常にそうする必要がありますので、行はpasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecialとなります。

mySheet.Range([formula])もできません。それは崩壊する必要があります。代わりに、私はあなたのためにそれを行う必要があり思い

Set addSection = Worksheets("Add Extra Section").Range("C3") 
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" 

をしたいと思います。また簡単なメモ、あなただけの値が貼り付けられた取得するPasteSpecialを行っている場合は、少し速く道は、このようにクリップボードの使用を避け、お互いに等しい範囲を設定することです:

Range([destination range]).Value = Range([range to copy]).Value

ので、してみてくださいこれは:

Sub AddExtraSection() 

Dim copySheet As Worksheet 
Dim pasteSheet As Worksheet 
Dim addSection As Range 

Set copySheet = Worksheets("Data Input") 
Set pasteSheet = Worksheets("Add Extra Section") 
Set addSection = pasteSheet.Range("C3") 
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" 

pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = addSection.Value 
End Sub 

編集:以下のコメントごとに、私たちはコードを強化し、少し明確にすることができます。

Sub AddExtraSection() 

Dim pasteSheet As Worksheet 

Set pasteSheet = Worksheets("Add Extra Section") 
'Next line will put "DataInput_[RANGE NAME]" in cell C3 of "Data Input" worksheet 
Worksheets("Data Input").Range("C3").Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!$C$3, "" "", """")" 

pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = _ 
    Worksheets("Data Input").Range("C3").Value 
End Sub 

copySheetを実際に使用したことはありません。削除しました。また、このマクロを展開する予定がない限り、pasteSheetaddSectionは混乱を招くので、私はそれを簡単に保つようにしました。

データ入力シートでは、セルC3に名前付き範囲を表示する必要があります。

名前付き範囲は、「余分なセクションの追加」シート、セルC3にリストされています。その文字列を取り、スペースを取り除く。次に、 "DataInput_"を先頭に追加します。これは、...Formula =行の動作です。 (式を後方に見ると、Excelは最初にスペースを置き換えて、それを "DataInput_"と連結します)。

最後に、 "DataInput_ [NAMED RANGE]"文字列を "Add Extra Section"の最後の行+1に入れてください。

EDIT2:申し訳ありませんが、これについて考えることは、より良い方法は、ワークシートを使用して回避し、VBA自体に仕事をすることです:レンジ `リテラル

Sub updateNamedRange() 
Dim destinationCell As Range, inputCell As Range 

Set destinationCell = Worksheets("Add Extra Section").Cells(Worksheets("Add Extra Section").Rows.Count, 1).End(xlUp).Offset(1, 0) 
Set inputCell = Worksheets("Add Extra Section").Cells(3, 3) 

destinationCell.Value = "DataInput_" & WorksheetFunction.Substitute(inputCell, " ", "") 

End Sub 
+0

その式は循環参照になりませんか? – Comintern

+0

@Comintern - 正直言って、私は実際に式をチェックしていませんでしたが、あなたがVBAでどうやってやっているのか分かりました。おそらく$ C $ 3は別のシートを参照していると思いますか?おそらく '" = "" DataInput _ ""&SUBSTITUTE( 'データ入力'!$ C $ 3、 "" "、" "" ")" 'でしょうか? – BruceWayne

+1

意図していることを伝えるのは難しいですが、 '.Range(" C3 ")'に入るのは '$ C $ 3'だけではありません。 – Comintern

関連する問題