• ベストアンサー

エクセルのワークシート関数

=E16&" / "&E17&" / "&E18&" / "&E19&" / "&E20&" / "&E21&" / "&E22&" / "&H16&" / "&H17&" / "&H18&" / "&H19&" / "&H20&" / "&H21&" / "&H22&" / "&L16&" / "&L17&" / "&L18&" / "&L19&" / "&L20&" / "&L21&" / "&L22 ワークシートのセル E16~E22 H16~H22 L16~L22 にある値を、 / で結合して表示する関数なのですが、もっと簡単に記述する方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.6

こんにちは。お邪魔します。 エクセルの関数や数式で、ということだと、 文字列の連結については、何れにしても、セルをひとつずつ指定して連結するしかないです。 ちょっと回答を躊躇いましたが、 自分なら迷わずユーザー定義関数(UDF)での対応を選ぶでしょうから、 2例、紹介してみようと思います。 同じ記述を繰り返すExcel数式の作成って、モチベーション下がっちゃって、 手が止まっちゃうんですよね。 そういったこともあって私の場合はUDF書いた方が、早く仕事が終わことが多いです。 迷わず、というよりは、迷いたくないから、の方が本音に近いですね。 後は好みの問題でしょうか。 ご質問のテーマとしては、ワークシート関数、ということなので、 いくら簡単に書けるとはいえ、UDFはお望みでないのかも知れませんが、 その場合は、ご参考まで。 二つめのUDFについて、お求めの仕様によっては、       For nR = 1& To UBound(vTmp)         For nC = 1& To UBound(vTmp, 2) この部分の For Next のネストを入れ替える方がいいのかも知れません。       For nC = 1& To UBound(vTmp, 2)         For nR = 1& To UBound(vTmp) 今回の例示では、どっちでも結果は一緒ですけれど。 第一引数のセル範囲に、複数の領域を持つセル範囲を指定する時は、 セル参照を括弧で括る必要があります(◆数式使用例、参照)。 ' ' 簡易限定版。単列複数セルの組み合わせを指定すること。単一セル、複数列、はエラー。 ' ' ◆数式使用例  =JoinTextP((E16:E22,H16:H22,L16:L22)," / ") Function JoinTextP(ByVal Target As Range, Optional ByVal Delimiter As String)   Dim vTmp As Variant   Dim r As Range   Dim sBuf As String   For Each r In Target.Areas     vTmp = r.Cells.Value     vTmp = Application.Transpose(vTmp)     sBuf = sBuf & Delimiter & Join(vTmp, Delimiter)   Next   JoinTextP = Mid$(sBuf, Len(Delimiter) + 1) End Function ' ' 高性能汎用版。セル範囲ならば、どのような指定にも対応。計算速い。 ' ' ◆数式使用例  =JoinText((E16:E22,H16:H22,L16:L22)," / ") Function JoinText(ByVal Target As Range, Optional ByVal Delimiter As String)   Dim vTmp As Variant   Dim r As Range   Dim sBuf As String   Dim nDlmLen As Long   Dim nPos As Long   Dim nR As Long   Dim nC As Long   nDlmLen = Len(Delimiter)   sBuf = String$(Target.Count * 255, vbCr)   nPos = 1&   For Each r In Target.Areas     vTmp = r.Cells.Value     If IsArray(vTmp) Then       For nR = 1& To UBound(vTmp)         For nC = 1& To UBound(vTmp, 2)           Mid(sBuf, nPos) = Delimiter           nPos = nPos + nDlmLen           Mid(sBuf, nPos) = vTmp(nR, nC)           nPos = InStr(nPos + 1&, sBuf, vbCr)         Next nC       Next nR     Else       Mid(sBuf, nPos) = Delimiter       nPos = nPos + nDlmLen       Mid(sBuf, nPos) = vTmp       nPos = InStr(nPos + 1&, sBuf, vbCr)     End If   Next   JoinText = Mid$(sBuf, nDlmLen + 1&, nPos - nDlmLen) End Function

emaxemax
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

No4の回答の補足です。 いま一つ操作の目的やデータの種類が不明なので、効率的な操作が異なりますが、同じような操作を連続して行いたいなら、数式は特定のセルに入力しておき、F9キーで表示した結合文字列の必要な部分を数式バーからコピーして、Escキーで数式を戻しておき(今後も使用できるように)、M1セルでCtrl+Vで必要な文字列部分を貼り付ける操作を行った方が良いかもしれません。 ちなみに、目的にもよりますが、単純に文字列をそのまま結合するなら(区切り文字を入れなくてもよいなら)PHONETIC関数(この場合は関数で表示したデータは使用できません。またふりがな情報を一括削除する必要があります)やフィル(英数字なら空白で区切られる)の機能を利用することもできます。

emaxemax
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

関数との合わせ技でそれらの(多数の)セルを単純に結合するなら、以下のような方法もあります。 どこかのセル(例えばM1セル)に以下の式を入力します。 =CONCATENATE(E16:E22,"/",H16:H22,"/",L16:L22) このセルの数式バーで数式全体を選択しF9キーを押します。 この表示された数式内容の先頭の「={"」と末尾の「"}」を削除し、表示したいセルに以下の式を入力します。 =SUBSTITUTE(M1,""";""","/")

emaxemax
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.3

1.セル F16 に式 =E16 を入力 2.セル F17 に式 =F16&"/"&E17 を入力して、此れを下方にズズーッと   (セル F22 まで)ドラッグ&ペースト 3.範囲 F16:F22 を[コピー]して、此れをセル I16 および M16 に   [貼り付け] 4.任意のセルに 式 =F22&"/"&I22&"/"&M22 を入力した結果が、   貴方が求めるもの

emaxemax
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! どうしても関数で!というコトであればNo.1さんもおっしゃっている通り 地道にお示しの数式のようにやるしかないと思います。 他の方法としてはVBAになってしまいますが、一例です。 結果をA1セルに表示する場合のコードです。 範囲内に空白セルがあっても対応できるようにしています。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, myArray, str As String myArray = Array(5, 8, 12) '←E列・H列・L列の列番号 For k = 0 To UBound(myArray) For i = 16 To 22 If Cells(i, myArray(k)) <> "" Then str = str & Cells(i, myArray(k)) & " / " End If Next i Next k Range("A1") = Left(str, Len(str) - 3) '←「A1」部分は実際に表示したいセル番地に! End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

emaxemax
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>・・・にある値を、 / で結合して表示する関数なのですが、もっと簡単に記述する方法はないでしょうか? 基本的に関数でご希望の操作をするなら、提示された式が最も簡単な数式になります。 しかし、提示された数式はかなり特殊な形式でデータを表示しているように思うのですが、具体的にどのような目的でそのような結合した文字列をつくりたいのでしょうか? 目的によっては、関数ではなくExcelの他の機能を利用するほうが簡単に文字列結合ができる方法もありますので、具体的にどのようなデータ(例:英数文字、かな漢字入りの文字など)をどのように(例:区切りはスラッシュに限定されないなど)結合したいのか補足説明されるとよいと思います。

emaxemax
質問者

お礼

早速ありがとうございます。 > 具体的にどのような目的でそのような結合した文字列をつくりたいのでしょうか? 計算上求められたデータ(文字列)を限られたスペース(結合したセル範囲)に折り返して表示させるため、データを一個ずつ改行しないで一つの文字列として / (半角スペース+/+半角スペース)で区切って結合させたいのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのワークシート関数で最小値

    エクセルのワークシート関数でA1セルとB1セルの最小値を求める場合 =MIN(A1,B1) だと思います。 しかし、これではどちらかのセルが空白だった場合、空白セルを0とみてはくれません。 そのため =MIN(A1*1,B1*1) と、1を乗ずることで空白セルを0にして比較できます。 しかしA1、B1セルの値が直接入力されたものでなく計算の結果の場合にはうまくいかない場合があります。 A1、B1ともに計算式がはいっているので空白はあり得ないのですが、計算結果で =”” と空白表示の場合、空白表示セルを0とみてはくれません。 しかし、空白表示セル(=””)に1を乗ずるとVALUEエラーになってしまいます。 やむを得ず、IF関数を使い =MIN(IF(A1="",0,A1),IF(B1="",0,B1)) と、無理やり=””を0にしているのですが、ほかになにか良い方法はないでしょうか? A1、B1の計算式を変えて=0とすればよいのでしょうが、元の計算式を変えずにやる方法があれば御教示ください。

  • エクセルで、ワークシート名をセルから参照する

    エクセルで、ワークシート名をセルに表示する方法は書いてありますが、セルの値をワークシート名とするにはどうしたらいいでしょうか。 つまり、 「ワークシート名 → セル」 ではなく、 「セルの値 → ワークシート名」 ということです。 現状、会社が変わると決算期が変わるため、決算期を変更する度にワークシート名を変えていますが、変わった都度ワークシート名を手で変更するのは手間が掛っています。 具体的には、例えば、 3月決算の会社のファイルは、4月シート、5月シート・・・ 12月決算の会社は、1月シート、2月シート・・・ のようにシート名を変えています。 そのため、セルに決算期を入力すると、自動で各ワークシート名も変更するようにしたいのですが、どうしたらいいでしょうか。 そういう関数はないようですし、マクロ・VBAの本等を見ても、よくわかりません。 宜しくお願い致します。

  • EXCELでワークシートを検索して値を返したい。

    こんばんは。 いろいろ調べてみたのですが、わからなかったので質問させていただきます。 EXCELで「111」「222」「333」「444」「555」という五つのワークシート名を持つブックがあります。 「111」のシートのセル"A1"に,"222"と入力すると、隣のセル"A2"にシート「222」の特定のセルの値(例えばC20のセルの値)を返し、セル"A1"に「555」と入力するとセル"A2"にシート「555」の特定のセルの値を返すといったものを作るには、どうしたらいいんでしょうか? できれば関数だけで作りたいのですが、もしむりならマクロではどういうコードになるのでしょうか? よろしくお願いします。

  • Excelのコピーができません

    excelで作成したワークシートがあります。 ・セル結合 ・罫線、セルパターン等を使用しています。 ・セルには関数で計算した値があります。 これを別のワークシートに同じ形式で、関数を値にしたものを作りたいと思い、 ・まず、普通にコピ-&ペースト。これで罫線、セルパターン、列幅、セル結合などの書式がコピーされます。 ・しかし、セル値が関数のままなので ・同じ範囲に同じものを「値のみ」ペーストをしようとすると、「この操作には、同じサイズの結合セルが必要です。」と出てペーストできません。 結合セルを解除せずに、どうすればコピーできるか、どなたか教えて下さい。

  • Excelの関数について

    A1セルに日付が「2015/11/2」と入っています。セルの書式設定で表示を「H27.11.2」としています。 これを、「4271102」と7ケタの和暦にして別シートに値貼り付けできるようにしたいのですが、良い方法を教えていただけますでしょうか。 TEXT関数などいろいろ試してみたのですが、上手くいきませんでした。宜しくお願いいたします。

  • EXCELワークシート上でデータが表示された

    こんにちは。アドバイスお願いします。 EXCEL2003ワークシート上で関数をいくつか利用した表を作成中です。 一度関数を確定して、再度そのセルをアクティブにした後関数のパレットを出し、 編集をやったのですが、その後エンターきーで数式の編集を終了した直後、 編集をしたセルだけがデータ(関数式)が表示されてしまいました。 ???ワークシートのデータを表示したわけではないです。 その編集したセルだけです。 どうしてそのような現象が起こってしまったのでしょうか? また、その後の処理方法を教えてください。 朝からとても困っている最中です・・・。

  • Excel にて非表示行を探すワークシート関数

    ある膨大なデータをまとめた数百行からなる Excel ファイルがある のですが、その中で数箇所「非表示にされた行」があります。 その非表示行を探すワークシート関数って有りますでしょうか? (ワークシート関数が無理なら、マクロでも良いです。) ・非表示にされた行は1行だけの時もありますし、  2, 3 行をまとめて非表示にしている場合もあります。 ・Excel バージョンは 2003 です。 ・私の方で見つけた1つの方法として、以下の方法があります。   1. 適当な列に連続データで 1 から始まる番号を振る   2. それを適当なグラフにする   3. グラフの中で急に傾きが変化している所があれば、そこが非表示行である ・ただし、上記の方法ですと数十行なら視覚的に見つけやすいのですが  数百行、数千行の場合はグラフの中の傾きの変化が見つけづらいので NG ・一番理想的なのは画像の中の B4 (黄色いセル) のように、非表示行の1つ上の行に  "1" を表示し、かつ、それをワークシート関数で実現する事です。 ・Ctrl-A で全部のセルを選択し、適当な所で右クリックをして「再表示」とすれば  非表示行が表示される方法は既に知っております。  私が知りたいのは「非表示の状態で、非表示行の場所」を知りたいのです。 以上、よろしくお願いします。

  • Excel ワークシート関数で参照セルのアドレスを固定値ではなく動的に記述したい

    皆様こんにちは。 Excel ワークシート関数で参照セルのアドレスを固定値ではなく、他のセルの値 (式の計算結果) を使用して動的に記述したいのですが、可能でしょうか。 一例ですが、 =VLOOKUP("山田 花子",Sheet2!A2:C100,3,FALSE) という式の参照先アドレス範囲開始行「2」を固定値ではなく、他のセルの値を使用して動的に記述したいのです。 また、参照先の終端である、「100」についても固定値ではなく、有効データ領域の終端を動的に取得する方法 (VBA の Worksheet.UsedRange.Rows.Count または Worksheet.UsedRange.Rows.Address に相当) が知りたいと思います。 どちらも、計算式そのものをVBAで動的に出力するのは容易なのですが、出力されたブックを手作業で編集する際の利便性も考慮すると、ワークシート関数だけで解決する方法も知っておいたほうがよいと思っています。 ご存知の方、コメントを頂けると幸いです。

  • 「ワークシート関数」

    良くわからないのですが エクセルのワークシートで使う関数を「ワークシート関数」と言い、 VBAで使うワークシート関数を「WorksheetFunction関数」と言うのですか?

  • エクセル関数について

    エクセルの関数についてなのですが、例えば「セルA3」に「セルB2」の値を表示させるには「=(B2)」と「セルA3」に表示させてます。別のSheetの値も表示できるのでしょうか?例えば「Sheet1.Range("A3")」の値をSheet2のA1に表示させたい場合Sheet2のA1にはどのような関数を入力していけばよいのでしょうか?VBAは使わずに表示したいのですが。関数はまだほとんど使ったことがないので分かる人いたら教えてください。よろしくお願いします。

PX-105印刷できない
このQ&Aのポイント
  • PX-105プリンターで印刷できない問題が発生しています。
  • プリンターは正常に動いているが、印字ができないため、真っ白な用紙が出てきます。
  • EPSON社製品に関する質問です。
回答を見る

専門家に質問してみよう