2017-01-10 3 views
1

Text(E2,"MM/DD/YYYY")式をExcel VBAで適用したかったのです。私は複数のシートを使用して、セルの宛先とセルの参照は固定されていません。それで、私は完全に動作しているCell宛先に対してInput-boxメソッドを使用し、inputboxメソッドを介して手動でセル参照を選択したり変更したりしたかったのです。 など。私はA2セルで上記の式を書いて、私のターゲットセルはE2です。セルの選択はinputboxを介して行われます。入力ボックスメソッドを使用した式への参照

私の計画はinputboxで両方のものを選択することでしたが、私はちょうど初心者なので、計画を変更してコードを書き直しました。しかし、入力ボックスで式範囲を編集しているときにコードが問題を抱えているように見えますが、時には自分のiputsを考慮しません。私はテキスト(E2,"MM/DD/YYYY")を言うなら、それはテキスト(D2か何か、「MM/DD/YYYY」)

Option Explicit 

Sub FinalTxtDte() 

Dim Rng As range 
Dim LastRow As Long 
Dim Frmla As String 
Dim DestRng As range 

On Error Resume Next ' if the user presses "Cancel" 

Set Rng = Application.InputBox("Select a Cell which needs to be converted in Date format.", "Range Selection", Type:=8) 

Err.Clear 

On Error GoTo 0 

If Not Rng Is Nothing Then 

    Frmla = "=TEXT(" & Rng.Address("False", "False") & ",""MM/DD/YYYY"")" 

    On Error Resume Next ' if the user presses "Cancel" 

    Set DestRng = Application.InputBox("Select a Cell where you would like to get a Converted Date.", "Range Selection", Type:=8) 

    Err.Clear 

    On Error GoTo 0 

    If Not DestRng Is Nothing Then 

     DestRng.Formula = Frmla 

    LastRow = Rng.End(xlDown).Row 
    DestRng.Select 
    range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Select 
    Selection.FillDown 
    range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Value _ 
    = range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Value 

    End If 

    End If 

End Sub 
+0

'r [0] c [1]'は選択を1つだけオフセットします。 'r [0] c [0]' – cyboashu

+0

をコメントアウトして何が起こるかを確認します。おそらくRNGはNothingではなくむしろ= ""をチェックするべきだと思います。 – SJR

答えて

0

次のコードは、あなたが(現在応じてセルと数式のターゲットを選択するために、2個のInputBox ESを使用できるようになる選択しますあなたのポストレクセットには、それは1細胞のためです)。

2番目のInputBoxを変更して、式の宛先範囲を選択しました。

ユーザがInputBoxで"Cancel"オプションを選択した場合は、On Error Resume Next(以降はOn Error GoTo 0)のままにする必要があります。

コード

Option Explicit 

Sub TextDateFormula() 

Dim Rng As Range 
Dim LastRow As Long 
Dim Frmla As String, Txt As String 
Dim DestRng As Range 

On Error Resume Next ' if the user presses "Cancel" 
Set Rng = Application.InputBox("Select a cell.", "Range Selection", Type:=8) 
Err.Clear 
On Error GoTo 0 

If Not Rng Is Nothing Then  
    Frmla = "=TEXT(" & Rng.Address(True, True) & ",""MM/DD/YYYY"")" 

    On Error Resume Next ' if the user presses "Cancel" 
    Set DestRng = Application.InputBox("Select a range to add Decimal Hours.", "Range Selection", Type:=8) 
    Err.Clear 
    On Error GoTo 0 

    If Not DestRng Is Nothing Then 
     DestRng.Formula = Frmla 
    End If   
End If 

End Sub 

編集1:絶対アドレスを取らないように式ためには、以下のコード行を変更します。あなたがする必要がある

Frmla = "=TEXT(" & rng.Address(False, False) & ",""MM/DD/YYYY"")" 

Address("Row Absolute", "Column Absolute")の後の角括弧内のセクションを変更します。したがって、列と行の設定をあなたの必要に応じて。

+0

助けてくれてありがとう。私はあなたのコードにいくつかのアクションを追加し、元の投稿を修正しました。私はあなたにそれを確認して欲しいと思いました。アクションは、固定参照で数式をコピーすることです。私は間違った出力を得ています。ご質問がある場合はお知らせください。 – Rosh

+0

OKですので、コードは絶対的な意味の他にうまく機能していますか?相対参照が欲しいので、下にドラッグできますか? –

+0

のために私はコード化された行をいくつか追加したので、マクロはそれを自動的に行うべきです。 – Rosh

関連する問題