Excel の列からテキストの行のみをコピーするにはどうすればよいですか?

Excel の列からテキストの行のみをコピーするにはどうすればよいですか?

次のようなファイルからテキストを定期的に抽出する必要があります。

Excel のファイルのスクリーンショット

理想的には、次の 2 つの方法があります。

  1. テキストの個々の行のみ

    例:
    実際に出版物が出版されました

    このデータを分析し、

    最近発表されたより多くのデータ

  2. 段落形式(異なる行のテキストを 1 つのテキスト ブロックに結合し、Word、Google ドキュメントなどで編集できるようにする)

    例:
    完了しました。このデータから実際に出版物ができました。最近発表されたさらなるデータに取り組んでいます。

ファイルを受け取ると、すべてが列 A にあります。不要な数字の行が 2 行あり、その後に必要なテキストの行が 1 行、その後に空白の行があり、その後、このパターンが何千行も繰り返されます。

当然ですが、これを手動で行うには長い時間がかかるので、ご協力いただければ幸いです。

答え1

A 列の 3 行目ごとに、つまり A3、A7、A10 などのデータを抽出する必要があるようです。

まず、B 列の最初の 2 つのセルに 3、7 と入力し、下にドラッグして 3、7、10、13 などの連続した数字を作成します。

ここで、C1 に数式 =INDIRECT("A"&B1) を記述します。これにより、A3 セルのテキストが表示されます。数式を下にコピーして、A7、A10 などのテキストを表示します。

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

すべてのテキストを結合するには、Excel 2016 を使用している場合は CONCAT または TEXTJOIN 関数を使用できます。TEXTJOIN の利点は、テキスト間にスペースやカンマなどの区切り文字を使用できることです。空のセルを無視することもできます。次の例では、スペースが区切り文字として使用され、True が空のセルを無視するために使用されています。

=TEXTJOIN(" ",TRUE,C1:C11)

以前のバージョンでは、CONCATENATE 関数を使用できますが、すべてのセル参照を 1 つずつ記述する必要があります。

=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).  

答え2

コードを書かずにこれを行う簡単な方法はないと思います。おそらく Excel の VBA で実行できると思いますが、私はあまり経験がありません。

Python でこれを行う方法の例を次に示します。このスクリプトは、指定された列のセルを調べ、値が数字で始まっていない場合はその値をファイルに出力します。

Excelシート:

サンプル Excel シートの画像

出力:

Here's the first string and the second now a third

コード:

from openpyxl import load_workbook # package for working with xls files
import re # regex package

workbookName = 'test.xlsx'
sheetName = 'Sheet1'
column = 'A'
maxRow = 50
outputFile = 'excelOutput.txt'

# Open the workbook
wb = load_workbook(workbookName)
# Create a file to put the data into
fh = open(outputFile, 'w')

# Loop through all the rows
for kk in range(1,maxRow):
    # Grab the cell's value
    cellValue = wb[sheetName][column+str(kk)].value
    # If the cell isn't empty
    if cellValue != None:
        # If the cell doesn't start with a number
        if not re.search("\\d",str(cellValue)[0]):
            # Write the value from the cell into the text file
            fh.write(cellValue)
# Close the file
fh.close()

答え3

範囲内の不要な行を簡単に削除するには、最初に行を並べ替えて、たとえばすべての空の行をグループ化するのが最適です。組み込みのセルの並べ替えを使用するのはかなり簡単ですが、テキストの最初の順序を維持するには、いくつかの追加手順が必要です。

A1:A200例として、データが範囲内にあるとします。実際のデータに応じて必要に応じて調整してください。

  1. 1セル に数字 を挿入し、セル にB1数字 を挿入します。セルを選択し、 関数を適用して、列 に 1 から 200 が含まれるようにします。これは、後でテキストを最初の順序で返すのに役立ちます。2B2B1:B200filllinearB

  2. 範囲を選択しA1:B200て並べ替えを適用します。これで、数値行、時間枠行、テキスト行、および空の行がグループ化されます。したがって、不要な行を選択して削除するのは簡単です。不要な行を削除すると、A1:B50列にテキストと元の行番号を含む範囲が作成されますB

  3. テキストの正しい順序を復元するには、範囲を選択しA1:B50、列で並べ替えますB

テキストを にコピーしてWordさらに処理するには、 を選択してコピーし、 に貼り付けますWord。表の書式設定を削除し、検索と置換を使用して行を連結します (paragraphで検索して置換しますspace)。

関連情報