Results of 1 - 1 of about 1398 for ������������ #N/A (0.016 sec.)
- [[20181229112524]]
- #score: 6905
- @digest: 2dc76fdb248c49b2665218a95c563272
- @id: 78241
- @mdate: 2018-12-30T03:54:44Z
- @size: 7132
- @type: text/plain
- #keywords: アf (13718), アd (12932), 計( (12588), 分3 (9432), buf2 (8340), セニ (7884), myary (7720), 分1 (7432), 区分 (7366), 分2 (6478), ニョ (5435), 見苦 (4676), caller (4648), mya (4217), 囲as (4100), 計= (3877), 囲. (3833), transpose (3435), 計列 (3336), 計a (3204), マジ (3183), 社c (3067), 集計 (2702), soulman (2284), lbound (2083), 2018 (1936), 土) (1755), ubound (1694), evaluate (1607), typename (1481), variant (1478), preserve (1416)
- 『区分ごとに並び替え』(前)
お世話になります。 区分ごとの名簿をD列の集計列に区分1、区分2、区分3の順番で並べるにはどうすれば良いですか? A B C D 1 区分1 区分2 区分3 集計 2 a c e a 3 b d f b 4 c d e f また、下のように区分1に"g"が追加されたら集計列もbとcの間に入るようにしたいです。 A B C D 1 区分1 区分2 区分3 集計 2 a c e a 3 b d f b 4 g g c d e f よろしくお願いします。 < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- 掟破りのユーザー定義関数! ちょっと多めに範囲を選択して、 表示する時もちょっと多めに範囲を選択した状態でCtrl+Shift+Enterで確定します。 一応↓こんな感じになりました(^^; =集計(A2:C7) 区分1 区分2 区分3 集計 a c e a a =集計(A2:C7) b d f b b g ア D社 c g f d c e d f ア f e f D社 #N/A #N/A #N/A #N/A #N/A Option Explicit Function 集計(ByVal 範囲 As Range) As Variant Dim MyA As Variant Dim MyAry() As Variant Dim i As Long Dim j As Long Dim k As Long MyA = 範囲.Value For j = LBound(MyA, 2) To UBound(MyA, 2) For i = LBound(MyA, 1) To UBound(MyA, 1) If MyA(i, j) <> "" Then k = k + 1 ReDim Preserve MyAry(1 To k) MyAry(k) = MyA(i, j) End If Next Next 集計 = Application.Transpose(MyAry) End Function そりゃないぜ!セニョーラ!セニョリータ! v(=∩_∩=)v (SoulMan) 2018/12/29(土) 14:07 ---- こんにちは ^^ めっちゃ力わざですけど。。。VBA シート2も作業でつかいましたので。。。まるごとふっとびます(消える)^^; buf2の初期化は無駄かもですが(。。。用心の為 A^_^;) 新規BOOKでお試しを Option Explicit Sub main() Dim s1 As Worksheet Dim s2 As Worksheet Dim buf Dim buf2() Dim rr As Range Dim r As Range Dim y As Long Dim i As Long Dim j As Long Set s1 = Worksheets("Sheet1") Set s2 = Worksheets("Sheet2") s1.Columns(4).SpecialCells(2).Clear s2.UsedRange.Delete s1.UsedRange.Copy s2.Range("A1") s1.Columns(4).Cells(1) = "集計" With s2 y = 2 .Rows(1).Delete Set rr = s2.UsedRange For Each r In rr.Columns Debug.Print r.Address buf = r.SpecialCells(xlCellTypeVisible) If TypeName(buf) = "Variant()" Then For i = 1 To UBound(buf, 1) If buf(i, 1) <> "" Then ReDim Preserve buf2(j) buf2(j) = buf(i, 1) j = j + 1 End If Next s1.Cells(y, 4).Resize(UBound(buf2) + 1, 1) = WorksheetFunction.Transpose(buf2) y = y + UBound(buf2) + 1 ElseIf TypeName(buf) = "String" Then s1.Cells(y, 4) = buf y = y + 1 End If j = 0: Erase buf2 Next End With End Sub (隠居じーさん) 2018/12/29(土) 14:38 ---- 数式でやろうと思ったんだけど。 tb1 = Application.Transpose(Range("A2", Range("A" & Rows.Count).End(xlUp)).Value) tb2 = Application.Transpose(Range("B2", Range("B" & Rows.Count).End(xlUp)).Value) tb3 = Application.Transpose(Range("C2", Range("C" & Rows.Count).End(xlUp)).Value) tb4 = Split(Join(tb1) & " " & Join(tb2) & " " & Join(tb3)) Range("D2").Resize(UBound(tb4) + 1).Value = Application.Transpose(tb4) (BJ) 2018/12/29(土) 14:52 ---- うわ〜〜〜マジックナンバー。。。ならぬ マジックコード(わるさはしないと思いますが、余分なものが ^^;) (隠居じーさん) 2018/12/29(土) 14:38の Debug.Print r.Address は消してくださいね m(_ _)m すみません。 来年はあやまらなくてすむようにしよぉ〜(できないかも)(#^.^#) ( ̄▽ ̄); (隠居じーさん) 2018/12/29(土) 15:17 ---- #N/Aが見苦しい場合は、↓こうすると消えました(^^; 数合わせしてね =IF(COUNTA(集計(A2:C16))<ROW()-1,"",集計(A2:C16)) 区分1 区分2 区分3 集計 a c e a a=IF(COUNTA(集計(A2:C16))<ROW()-1,"",集計(A2:C16)) b d f b b g ア D社 c g ss f j d ss y qqq e y o f o o p c d ア f qqq o p e f D社 j (SoulMan) 2018/12/29(土) 15:44 ---- >#N/Aが見苦しい場合は、 SoulManさんのを少しさわってみました >ReDim Preserve MyAry(1 To k) はやめて MyAry = Evaluate("transpose(if(a1:a" & Application.Caller.Count & "="""","""",""""))") で、どうでしょうか。 (マナ) 2018/12/29(土) 16:36 ---- こんばんは! ありがとうございます。 入れ物を .Caller.Count で数えるんですね? Niceです。勉強になりました。ありがとうございます。 これなら =集計(A2:C16) だけでいいですね(^^; ↓あってますぅ? Option Explicit Function 集計(ByVal 範囲 As Range) As Variant Dim MyA As Variant Dim MyAry() As Variant Dim i As Long Dim j As Long Dim k As Long MyA = 範囲.Value MyAry = Evaluate("transpose(if(a1:a" & Application.Caller.Count & "="""","""",""""))") For j = LBound(MyA, 2) To UBound(MyA, 2) For i = LBound(MyA, 1) To UBound(MyA, 1) If MyA(i, j) <> "" Then k = k + 1 MyAry(k) = MyA(i, j) End If Next Next 集計 = Application.Transpose(MyAry) End Function (SoulMan) 2018/12/29(土) 17:04 ---- で、私風に書くと、、、 Option Explicit Function 集計(ByVal 範囲 As Range) As Variant Dim MyA As Variant Dim MyAry() As String Dim i As Long Dim j As Long Dim k As Long MyA = 範囲.Value ReDim MyAry(1 To Application.Caller.Count) 'MyAry = Evaluate("transpose(if(a1:a" & Application.Caller.Count & "="""","""",""""))") For j = LBound(MyA, 2) To UBound(MyA, 2) For i = LBound(MyA, 1) To UBound(MyA, 1) If MyA(i, j) <> "" Then k = k + 1 MyAry(k) = MyA(i, j) End If Next Next 集計 = Application.Transpose(MyAry) End Function (SoulMan) 2018/12/29(土) 17:24 ---- 名簿なので String型でよかったですね。 (マナ) 2018/12/29(土) 17:51 ---- そうですね(^^; 私も Caller.Count を失念しておりました。 大変勉強になりました。 ありがとうございます。 これからもよろしくお願いします。 (SoulMan) 2018/12/29(土) 18:13 ---- 大変遅くなり申し訳ございません。 皆様ありがとうございます。ユーザー定義関数の知識がなく、最初は ? でしたが、無事再現出来ました。SoulManさんありがとうございました。 ひとつだけ、BJさんのコードはどこに入力すれば良いのでしょうか?シートモジュールと標準モジュールにそれぞれ入れてみましたが、どうすれば動くのかわかりません。 申し訳ございませんがご教授お願いします。 (前) 2018/12/30(日) 11:36 ---- 標準モジュール sub ・・・・ end sub は、書いてません。 (コピペでポンコードは、あまり書かないので、ほぼコピペでポンコードだけど) (BJ) 2018/12/30(日) 12:36 ---- ありがとうございます。VBAでしたら当たり前のことでした。 失礼しました。 (前) 2018/12/30(日) 12:54 ...
-
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201812/20181229112524.txt
- [detail]
- similar
PREV
NEXT
Powered by
Hyper Estraier 1.4.13, with 98587 documents and 615713 words.
訪問者:
