Excel 2013のうるう年に基づいて単一の列データを複数の列に分割する


0

気象データで構成されるMS Excelのファイルは約100個あります。

私は毎年データを必要としていますが、ファイルには約140年のデータを持つ単一の列があり、手動でのコピーと貼り付けは非常に時間がかかります。したがって、1年(365セル)のデータが連続した行にコピーされるようにドラッグできる単純なコマンドを使用して、データを分割する方法はありますか。

また、3年ごとのデータは、残りの365セルではなく366セルでなければならないというyear年の問題があります。


スーパーユーザーへようこそ。あなたからもう少し情報が必要です。質問を編集して、データのレイアウト方法とこれまでに試したことを含めてください。このサイトはサービスではなく、何かを試みて行き詰まったときに質問する場所であることに注意してください。
チャーリーRB

最初のデータポイントの実際の日付は何ですか?データを転置しようとしていますか?または、別の列に移動しますか?または、異なる年の異なる色を強調表示しますか?それとも、平均を取得しようとしていますか?あなたの目標は何ですか?
レイスタファリアン

約140年のExcelファイルのデータは、月または年の間にブレークなしで列Aに入れられました今、列Aから複数の列に各年のデータを別々に抽出して、列Bにist年のデータがあるようにします列Cにはsecont年のデータがあるため、o。4年目はhappens年であり、データは366セルである必要があり、その後5年目が開始されるため、問題は4年目で発生します。また、ここでファイルを確認してくださいリンクを
user322740

基本的に私はExcel ファイルを持っていますデータはすべて列Aに保持され、間に1のブレークはありません列B = 1列365の列365 =列A =列Aの列365の第2列=列Aの365の3番目のエントリただし、列D = 4番目の列Aの366のエントリ列E =列Aの5番目の365の列列F = 6番目列Aの365のエントリ列G = 7番目列Aの365のエントリしかし、列H = 8番目A列の366のエントリなど。
user322740

何年から始まりますか?A1の値は20XX年1月1日ですか?
デイブ

回答:


2

この質問ごとに他のマクロを動作させることはできないようであるため、ここで提示した困難な事実に取り組み、簡単に行えると考えました。

特定の日付範囲に対して、このマクロは機能します-

Sub test()
'fill dates
Application.ScreenUpdating = False
Dim NumCells As Integer
NumCells = [counta(A:A)]
Columns("A:A").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Cells(1, 1) = "1/1/61"
Range(Cells(1, 1), Cells(NumCells, 1)).DataSeries

'move data
Dim c As Range
Dim cCol As Integer
cCol = 4
label:
For Each c In Range("A:A")
If c.Value = "" Then Exit Sub

    For i = 1 To 366
        If Not Right(c, 4) = Right(c.Offset(i), 4) Then
         GoTo label2
        End If
    Next
label2:
        Range(c, c.Offset(i - 1, 1)).Copy
        Cells(1, cCol).PasteSpecial Paste:=xlPasteValues
        Range(c, c.Offset(i - 1, 1)).Delete xlShiftUp
        Range(Cells(1, cCol), Cells(366, cCol)).NumberFormat = "mm/dd/yyyy"
        cCol = cCol + 3
        GoTo label

Next
Application.ScreenUpdating = True
End Sub

私は...あまりにも少ないコード...これは私のものよりもはるかに良い答えだと思う
デイブ・

0

このマクロを試してください

Sub Button1_Click()

Dim row As Integer
row = 1

Dim otherRow As Integer
otherRow = 1

Dim year As Integer
year = 1

Dim column As Integer
column = 66 ' start on B

Dim preColumn As Integer
preColumn = 64

Do While (True)

If Range("A" & row).Value = "" Then
    Exit Do
End If

If (column > 90) Then
    preColumn = preColumn + 1
    column = 65
End If


If (preColumn = 64) Then

Range(Chr(column) & otherRow).Value = Range("A" & row).Value

Else

Range(Chr(preColumn) & Chr(column) & otherRow).Value = Range("A" & row).Value

End If


Dim addition As Integer
addition = 0

If (year = 4) Then
    addition = 1
End If

If (otherRow = 365 + addition) Then
column = column + 1
otherRow = 0

year = year + 1

End If


If (year > 4) Then
 year = 1
End If

row = row + 1
otherRow = otherRow + 1

Loop

End Sub

動作のかなり役に立たないスクリーンショット:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

データのコピーで試してみてください...すべてを壊す責任はありません。また、適切にテストし、すべてのデータが存在することを確認する必要がありますが、大丈夫だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.