2017-02-28 10 views
2

私のデータプロバイダは、私が取得する.XLSXファイル内のいくつかの点を変更しました。私は、このアプリケーションが期待するモデルに応じてデータを修正するために新しいサブを追加しました:VBA Excelアドイン:列の書式を一般的な日付からカスタム日付に変更するコード

Sub Feb27FixModel() 
    ActiveSheet.Range("H2").End(xlDown).NumberFormat = "dd-mmm-yyyy"   'change format of Processed Date 
    Dim colNum As Integer 
    colNum = ActiveSheet.Rows(1).Find(what:="Legacy code", lookat:=xlWhole).Column 
    ' Done twice to insert 2 new cols 
    ActiveSheet.Columns(colNum + 1).Insert 
    ActiveSheet.Columns(colNum + 1).Insert 
    ' New col headings 
    ActiveSheet.Cells(1, colNum + 1).Value = "Origin Code" 
    ActiveSheet.Cells(1, colNum + 2).Value = "Jurisdiction Code" 
    Range("A1").Select 
    ActiveCell.FormulaR1C1 = "County Name" 
    Range("B1").Select 
    ActiveCell.FormulaR1C1 = "State Abbreviation" 
    ActiveWorkbook.Save 
End Sub 

すべてが上記の1行目の結果を除き動作します。アクティブなワークシートでは、列Hはヘッダー行の値が「処理済日付」であり、H2セルとその下のセルは、Generalとして11/15/2016のような値で格納されます。すべての日付をdd-mmm-yyyyというカスタム日付に変更する必要があります。以下の文は、これは私のために行わ取得に失敗:

ActiveSheet.Range("H2").End(xlDown).NumberFormat = "dd-mmm-yyyy" 

EDIT(01March2017):下記@Jeepedからの回答に

おかげで、私は別のステートメントを追加し、これがいたコードです解決策:

With ActiveSheet 
    .Range(.Cells(2, "H"), .Cells(.Rows.Count, "H").End(xlUp)).NumberFormat = "dd-mmm-yyyy" 
    .Range(.Cells(2, "H"), .Cells(.Rows.Count, "H").End(xlUp)).Value = ActiveCell.Text 
End With 

EDIT(02March2017):

私が作りました昨日の間違い。デバッグでは、ブレークポイントのワークシートで適切なセルを選択しておく必要があります。したがって、ActiveCell.Text "sort of worked"を参照してください。それは、列H(最初の行を除く)のすべての行に、「2014年10月14日」になるようにテキストを複製する効果がありました。これは最小限の許容であった。

本当に必要なのは、列Hのすべての行のテキストを取得し、保存された値を2016年10月14日から2016年14月10日などに表示するように変更するステートメントです。フォーマットをカスタムに変更します。私は保存された値も変更する必要があります。私はそれをする方法を知らない。

+0

[Excel VBAマクロでの選択の使用を避ける方法](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)を参照してください。 – Jeeped

答えて

2

最後のセルでのみ、H列の値で操作しています。H2から最後のセルまでスパンして、すべてのセルの書式を設定します。

with ActiveSheet 
    .Range(.cells(2, "H"), .cells(.rows.count, "H").End(xlUp)).NumberFormat = "dd-mmm-yyyy" 
end with 
+0

ありがとうございます。私はあなたのコードで上記の私の試みを置き換え、全体の新しいアドインを実行しました。列Hのセルの値は以前と同じままです(つまり、標準値は11/22/2016として表示されます)。しかし、列Hのセルの1つをクリックして「セルの書式」を選択すると、書式は実際には一般書式からdd-mmm-yyyyに変更されています。実際に新しいフォーマットをセル値に適用して2016年11月22日に表示する別のステートメントが必要ですか? –

+0

あなたの日付は本当の日付ではないようです。単に日付のようなテキストです。列を選択し、Data、Text-to-Columnsを使用し、3番目の画面で正しいMDY形式を選択します。さらに、新しいデータをインポートするときには、これを将来のインポートで実行する必要があります。 – Jeeped

+0

ありがとうございます。上記OPの私のEDITを参照してください。あなたの答えは大きく助けました。 –

0

この4行ループは、このトリックを行う必要があります。それをテストしました。 ;)

For i = 2 To Columns("H").End(xlDown).Row 'from row nr 2 to the rownr of last cell of column H 
    Set currentCell = Cells(i, "h") 
    currentCell.Value = Format(currentCell.Value, "dd-mm-yyyy") 
Next i 

これは、各セルかかわらず、散歩やテキストフォーマットを変換するために、それらにFormat()機能を適用します。それが役に立ったら教えてください。

+0

ありがとうございます。あなたの提案を試してエラーをコンパイルしました。そこで、私はIntegerとしてDim i、次にForループの前にObjectとしてdim currentCellを追加しました。次に、エラーコード6がオーバーフローしました。 –

関連する問題