列の単一行を複数の行と列に分割するにはどうすればよいですか?


0

私はすべてを見渡して、検索のためにこれをどのように表現するかわからないか、そこに何もありません。元々、Excelシートの情報はテキストファイルから取得されていました。私はそれをExcelに適切に転送するために多くの作業(区切りと多くの検索/置換)を行わなければならず、それでもまだ正しくありませんが、それはうまくいくと思います。残念ながら、すべてを1つの行(A1、B1、C1など)に配置していました。情報を複数の行に分割する必要があります。

     A | B
1 | id | 219832
2 | id | 2398
3 | id | 0382
etc

そのいずれか、またはヘッダーの一部と見なされる他のすべてのセルと、適切な列に配置されるセル。

     A  |  B   |   C   |   D
1 | id  | type | label | date
2 | 232 |  A   |  Here | 12/12/12
3 | 643 |  B   | There | 10/14/11
4 | 832 |  A   | None  | 09/29/13
etc

これは現在、これがデータとして表示される方法です。

    id | TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV | type | A | Label | Here | date | 12/12/12 | id 
etc

誰かがこれを手伝ってくれるなら、とても感謝しています。2番目のオプションは、この情報のすべてを転送するために本当に必要なものであるため、私にとってはるかに役立ちますが、そこから手作業で作業できるので、最初のオプションは受け入れられます。また、これがどれほど大きいかを知っているように、私の行はJON1に拡張されています。

編集:

また、すべての検索/置換(一部ではありますが、ほぼ同じではありません)がなければ、データは各セルに貼り付けられます。

"id":"TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV"

そして、これはこのように見える方法です

    "id":"TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV" | "type":"A" | "label":"Here" | "date":"12/12/12" | {"id": 
etc

または類似のもの。それで作業しやすくなる場合は、それでも問題ありません。また、データの参照から、データのすべての行が「id」で始まるわけではないことにも気づいていますが、find / replaceを使用せずに、データの新しい行の先頭には{が付いています;

{"type":"A" |
{"id":"3242134" |
like that

1
たぶん、あなたが持っている行の例と望ましい結果は、あなたの問題のより良い理解に役立つでしょう。
jcbermu 14

Excelファイルをアップロードできますか?
14

いいえ、合法的に行うことはできません。ファイルには、非常に機密情報が含まれています。
エイノサトリアモンテ14

ソースデータはまだありますか?もしあれば、その構造を説明できますか?現在の状態から開始するよりも効率的であるこれをゼロからやり直す方法があるのではないかと思っています。
fixer1234 14

回答:


0

簡単な方法はVBAを使用することです。このように、行1の各セルに「フィールド」があると思います

{"id" : "TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV" | "type" : "A" | "label": "Here" 

マクロに移動して新しいマクロを作成し、次のコードを挿入する必要があります。

 Sub test()
        Dim wks As Worksheet
        Set wks = ActiveSheet
        Final = False
        i = 1
        InitialRow = 2
        Dim labels(0 To 4) As String
        labels(0) = "id"
        labels(1) = "type"
        labels(2) = "label"
        labels(3) = "grouping"
        labels(4) = "created"
        While Final = False
            ThisCell = Trim(wks.Cells(1, i))
            iniChar = Left(ThisCell, 1)
            If iniChar = "{" Then
                lengthCell = Len(ThisCell)
                ThisCell = Trim(Right(ThisCell, lengthCell - 1))
                InitialRow = InitialRow + 1
            End If
            PosLabelinCell = InStr(ThisCell, ":")
            LabelinCell = Trim(Left(ThisCell, PosLabelinCell - 1))
            lLabelinCell = Len(LabelinCell)
            DatainCell = Trim(Mid(ThisCell, PosLabelinCell + 1))
            lDatainCell = Len(DatainCell)
            LabelinCell = Mid(LabelinCell, 2, lLabelinCell - 2)
            DatainCell = Mid(DatainCell, 2, lDatainCell - 2)
            Select Case LabelinCell
                Case labels(0)
                    wks.Cells(InitialRow, 1) = DatainCell
                Case labels(1)
                    wks.Cells(InitialRow, 2) = DatainCell
                Case labels(2)
                    wks.Cells(InitialRow, 3) = DatainCell
                Case labels(3)
                    wks.Cells(InitialRow, 4) = DatainCell
                Case labels(4)
                    wks.Cells(InitialRow, 5) = DatainCell
            End Select
            i = i + 1
            If wks.Cells(1, i) = "" Then
                Final = True
            End If
        Wend
End Sub

最初の行のすべてのセルを調べて、セルが記号{で始まるかどうかをチェックします。これを改行文字と見なします。あなたが私に提供する4からラベルが欠落している場合(id、type、label、grouping、created)、空白のセルを残します。

ここで、F5または緑の「再生」ボタンを使用してマクロを実行します。行3からは、すべてのデータが列ごとに整理されます。


正しい。何らかの不明な理由により、idフィールドは常にエントリの最初のフィールドではありません。これを考慮して、2番目のタイプのフィールド({"id": "whatever")でこれをどのようにやり直しますか?少なくとも、これを使用して、各エントリを新しい行に配置できます。それか、それを使用して特定の値を検索し、それらを新しい行にのみ配置します。私はそれを作り直そうとしていますが、フィールドの〜70%はもう必要ありません。
エイノサトリアモンテ14

見つけられるラベルがどれであるかがわかっていれば、VBAスクリプトを変更できます(たとえば、id、type、nameなど)。
jcbermu 14

必要なラベルは次のとおりです。 id type label grouping created これら5つは、交換のために適切なシステムに注文するのに必要なすべてです。ありがとう。
エイノサトリアモンテ14

マクロExcelを確認し、変更したため、次の方法でデータが見つかった場合に機能します。{"type": "A" | {"id": "3242134" | そのような
jcbermu 14

動作していません。起こるのは、それがファイナルになることだけです。
エイノサトリアモンテ14

1

Excelの組み込み機能を使用できます。

以下の手順に従ってください:

  1. [ データ ]タブに移動します。
  2. [ データツール]グループには、[ テキストから列へ]をクリックします。

必要に応じて、テキストを列に変換ウィザードの指示に従います。

それが役に立たない場合は、1つの入力行と必要な出力を提供します。


Excelは、一度に1つの列しか選択できないと文句を言います。全体が1行と7000+列で構成されていると考えると、うまくいきません。
エイノサトリアモンテ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.