条件を指定して文字列を結合させたく、ユーザー定義関数を作成しております。
第一段階として、ワークシート関数のCONCATENATEを、選択した範囲の文字列が結合されるよう、((A1:A5)の様に)、ユーザー定義関数(仮にCONCATENATERANGE)を作成しました。
平たく言うと、SUMIFのSUMの部分を、この、CONCATENATERANGEに置換えたものが作りたいのです。
検索条件を、数値、文字列、空白以外といった条件に限定すれば、望むものができたのですが、演算子(<>,<=,>=,<,>,?,*)までを考慮するとなかなか厄介で、、、
そこで、どなたかSUMIFをコードで書ける方はいらっしゃいませんか?
私が望む関数(仮にCONCATENATERANGEIF)そのものズバリをご教示いただければありがたいのですが、何かと面倒かと思いますので。
どうぞよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
COUNTIF 関数の第 2 引数に例えば ">0" と指定しても文字列はヒットしないのと同様に、下の関数は、">0" などと指定した場合に、文字列のセルは結合しません。
また、行全体や列全体は、結合の対象外としました。Function ConcatenateRangeIf(rng As Range, cond As String) As String
Dim i As Long, j As Long, s As String
With rng
'第1引数に行全体あるいは列全体を指定した場合、関数は何も返さない
If .Address = .EntireRow.Address Or .Address = .EntireColumn.Address Then Exit Function
For i = 1 To .Rows.Count
For j = 1 To .Columns.Count
If WorksheetFunction.CountIf(.Cells(i, j), cond) Then s = s & .Cells(i, j)
Next j
Next i
End With
ConcatenateRangeIf = s
End Function
ご回答ありがとうございました。
MarcoRossiItaly 様の方法とは違いますが、昨日考えていたら、なんとなく完成いたしました。
ご回答ありがとうございました。
No.1
- 回答日時:
>平たく言うと、SUMIFのSUMの部分を、この、CONCATENATERANGEに置換えたものが作りたい
SUMじゃなくIFの部分の間違いですかね。
いずれにしても、逐一調べて合ってれば合計するだけですが。
public function ConcatenateSumif(a as excel.range, b as variant, c as excel.range) as variant
dim h as range
dim buf as variant
dim i as long
for each h in iif(c.columns.count = 1, a.rows, a.columns)
i = i + 1
buf = application.transpose(h.value)
if c.columns.count = 1 then buf = application.transpose(buf)
if isarray(buf) then buf = join(buf, "")
if buf = b then
concatenatesumif = concatenatesumif + c(i)
end if
next
end function
使い方:第3引数の向きにより縦横を判断する
=ConcatenateSumif(A1:C10,"判定値",D1:D10)
第一引数を横に結合した値(A1&B1&C1、A2&B2&C2…)がそれぞれ判定値なら、D列を合計する
=ConcatenateSumif(A1:E3,"判定値",A4:E4)
第一引数を縦に結合した値(A1&A2&A3、B1&B2&B3…)がそれぞれ判定値なら、4行目を合計する
=ConcatenateSumif(A1:A10,"判定値",D1:D10)
ふつーのSUMIFと同じ
質問が分かりづらくて申し訳ありません。
sumの代わりにconcatenateがしたかったのです。
どちらにしても、昨日考えていたらなんとなくできました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) 【画像あり】A1が●+B1と同じ文字がB列にある+C1と同じ文字がC列にある場合D1に〇を付ける 3 2023/03/09 18:18
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) エクセルの関数で質問です。 3 2023/02/24 14:07
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二酸化炭素の混成軌道の図を教...
-
共役or非共役の見分け方
-
高校生です。 化学の質問です。...
-
カチオンとアニオンとは?
-
π電子の数え方
-
c2h2の電子式と構造式について...
-
p軌道の「+」「-」とは?
-
塩化ナトリウムはなぜ共有結合...
-
ジクロロベンゼンの双極子モー...
-
選択クエリで空欄のテーブルが...
-
結合次数の求め方(化合物)
-
硫酸銅はなぜ5水和物3水和物1水...
-
科学反応式の結合手の数を教えて!
-
なぜトランスデカリンは環反転...
-
化学の1次結合,2次結合について
-
アセトン
-
CH3ClとCH3Fの双極子モーメント
-
配位数・配位子・配座数って
-
BF3のルイス構造式
-
C3H9Nの構造異性体をすべて書け...
おすすめ情報