適切なエクセル関数等はありますでしょうか?どなたか分かる方教えて頂けると嬉しいです(^O^)/

Anonymous
2018-02-23T08:41:39+00:00

エクセルで選んだセルの範囲内にある複数の文字列の数量をそれぞれ出力する方法があれば教えて欲しいです。

文字列の量が多いので、関数の数式に特定の文字列を入力する関数ではできません。

具体的には、英語表記の数百個の商品名をエクセルに打ち込み、どのワードが何回使われているかが知りたいのです。

商品名の各英語ワードの間はスペースなのでセルに分割まではできたのですが、

範囲指定したセル内に含まれる複数のワードの数量を出力したいのですが、適切な関数などが見つかりません。。

どなたかわかる方教えていただけると嬉しいですo(^o^)o

** モデレーター注 **

この質問は [Office | Excel | Mac | Office 365 for business] のカテゴリーに投稿されましたが、内容から判断し、こちらのカテゴリに移動いたしました。適切なカテゴリーに投稿すると、返信や回答が得られやすくなり、同じ質問を持つ他のユーザーの参考にもなります。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Makapu 92,385 評価のポイント ボランティア モデレーター
2018-03-19T22:59:29+00:00

こんにちは。

>これまでに紹介した方法で、1列に表示する方法がまだ解決していないようだったら、以下のようなWordを利用する操作が簡単です。

Excelで対象範囲をCtrl+Cでコピーし、ワードにCtrl+Vで貼り付けし、Ctrl+Hで置換ダイアログを出して「オプション」ボタンをクリックして「あいまい検索」のチェックを外して「検索する文字列」に「 」(スペース)、置換後の文字列に「^p」と入力して(「特殊文字」で「段落記号(p)」を選択)、「すべて置換」し、最後にCtrl+Aですべて選択しCtrl+Cでコピーして、Excelで空白列にCtrl+Vで貼り付ければ完成です。

>「オプション」ボタンをクリックして「あいまい検索」のチェックを外して

→「オプション」ボタンが表示されません。「あいまい検索」することもできません。

そもそもですが、WindowsとMacではワード機能や表示に違いがあるのではないでしょうか?

Mac で一列にする部分を試してみました所、こちらでは上手く行った様です。

  1. Excel の文字列をcommand+c でコピーします。(※区切り文字は半角スペース)

  1. Word 文書に [編集] >[形式を選択してペースト]>[テキスト]で貼り付けます。

   

  1. Ctrl+H で検索と置換ウィンドウを表示させたら、歯車マークをクリックし、[高度な検索と置換]をクリックします。

(またはメニューより[編集] > [検索] > [高度な検索と置換])

      ![](https://learn-attachment.microsoft.com/api/attachments/f5fdd213-fd2b-4a88-a243-d211e24d5a33?platform=QnA

  1. 高度な検索画面が出たら、画面左下の[▽]をクリックして、詳細設定を表示させます。

5.   「あいまい検索」のチェックを外して「検索する文字列」に「 」(スペース)、置換後の文字列に「^p」と入力して)「すべて置換」

(※(「特殊文字」で「段落記号(p)」を選択した所、段落記号が見える状態でExcelにコピーされてしまったので、段落記号は外しました。)

6. 置換後、Word 縦に並びましたので、Command+c でコピーしてExcelに貼り付けます。

7.  Excelに縦に貼りつきました。

この回答は役に立ちましたか?

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Anonymous
2018-03-19T12:29:31+00:00

TEXTJOIN関数が使えるなら以下の数式で文字列を結合してください。

この関数なら最大文字数は3万語以上いけるはずです。

=TEXTJOIN(" ",TRUE,A列のデータ範囲)

この後、このセルをコピーしてそのまま「値」貼り付けして「区切り位置」処理してセル分割し、そのセル範囲をコピーして「形式を選択して貼り付け」で「行列を入れ替える」して縦の1列のデータにして、ピボットテーブルで集計(項目名に商品名とつけておき、行ラベルとΣ値に商品名)または「重複の削除」で商品名一覧を作成しCOUNTIF関数で個数をカウントしてください。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

39 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2018-03-19T03:22:07+00:00

    TEXTJOIN関数が使えない場合の対処として参考までに。

    もしMac版のExcelにTEXTJOIN関数がないなら、以下のようなマクロのユーザー定義関数で同等の処理を行うことができます。

    textjoin関数の使い方とExcel2013以前の古いエクセルで使う方法

    https://www.excelspeedup.com/textjoin2/

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2018-03-18T21:32:44+00:00

    私もマックちゃんさんの方法をExcel2013で試してみましたが、

    単語(スペースで区切られた文字)の出現個数を取得できました。

    私はMacをもってないのでMacでは試せませんが、

    マクロでよければダメモトで下記マクロを試してみたら如何でしょう。

    データ数が多い場合ループでは時間がかかるので

    Countif を使いました。

    Sub 単語の出現個数()

        '前提条件

        'A列にスペースで区切られたデータがあるものとする

        'B列~D列はデータが無いものとする(B列を作業列にするので)

        'C列に単語、D列に出現個数を表示するマクロです

        '大文字と小文字は区別しません(重複の削除を使用するため)

        Dim i As Long, j As Long, k As Long, s As Double

        Dim last As Long, last2 As Long, kosu As Long

        Dim myStr As String, work As String, tango As Variant

        s = Timer

        Application.ScreenUpdating = False

        Columns("B:D").ClearContents

        last = Cells(Rows.Count, 1).End(xlUp).Row

        For i = 1 To last

            work = WorksheetFunction.Trim(Cells(i, 1))

            Cells(i, 1) = Replace(work, " ", " ")

        Next

        For i = 1 To last

            myStr = Cells(i, 1).Value

            tango = Split(myStr, " ")

            For j = 0 To UBound(tango)

                k = k + 1

                Cells(k, 2).Value = tango(j)

            Next

        Next

        last = Cells(Rows.Count, 2).End(xlUp).Row

        Range("B1:B" & last).Copy Range("C1")

        ActiveSheet.Range("$C$1:$C$" & last).RemoveDuplicates _

            Columns:=1, Header:=xlNo

        last2 = Cells(Rows.Count, 3).End(xlUp).Row

        Range("D1").Formula = "=countif($B$1:$B$" & last & ",$C1)"

        Range("D1").AutoFill Destination:=Range("D1:D" & last2 & ""), _

                    Type:=xlFillDefault

        Application.ScreenUpdating = True

        MsgBox "所要時間 " & Timer - s & " 秒"

    End Sub

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2018-03-16T03:13:06+00:00

    >そもそもですが、WindowsとMacではワード機能や表示に違いがあるのではないでしょうか?

    こちらにMacの環境がないので確認ができないのですが、新しいバージョンなら操作法やコマンドが違う可能性はありますが、基本の機能はWindows版と変わりがないと思います。

    >→「オプション」ボタンが表示されません。「あいまい検索」することもできません。

    「オプション」に代わるようなボタンはないでしょうか?

    具体的なコマンド名などをこちらでは確認できませんので、他のMacユーザーからの回答をお待ちください。

    ちなみに、Excel2016なら文字列を連結するTEXTJOIN関数が使えますので(これが最も簡単な対応かもしれません)、ご使用のExcelでこの関数が使用できるか調べてみてください。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません