- ベストアンサー
共通の値を持つ座標の組み合わせについて
_Kyleの回答
- _Kyle
- ベストアンサー率78% (109/139)
#11,13,15,16です。 #16の続きです。 親と同じモジュールに記述してください。 '--------↑ツヅク↑------------------ 'チェック---------- Private Sub Sample_c() Dim ckFlg As Boolean Dim i As Long Dim j As Long 'チェック--- For i = 1 To psCnt ckFlg = True For j = 1 To rsCnt If Not dtTbl(ckAry(j), psAry(i)) Then ckFlg = False Exit For End If Next j If ckFlg Then Exit Sub Next i 'ヒット----- rtCnt = rtCnt + 1 rtAry(rtCnt) = rsAry If rtCnt Mod 500 = 1 Then Application.StatusBar = rtCnt & " 件" End If End Sub '書出P------------ Private Sub Sample_d(ByRef rtSht As Worksheet) '宣言------- Dim dpTbl() As Variant Dim tpTbl() As Boolean Dim mxCnt As Long Dim i As Long Dim j As Long Dim k As Long Application.StatusBar = "書き出し中" '並び調整--- ReDim tpTbl(rtCnt, tbSiz) mxCnt = 0 For i = 1 To rtCnt k = 0 rsAry = rtAry(i) For j = 1 To tbSiz If rsAry(j) Then k = k + 1 tpTbl(i, odAry(j)) = rsAry(j) End If Next j If mxCnt < k Then mxCnt = k Next i '書出配列--- ReDim dpTbl(rtCnt, mxCnt) For i = 1 To rtCnt k = 0 For j = 1 To tbSiz If tpTbl(i, j) Then k = k + 1 dpTbl(i, k) = j End If Next j Next i Application.Calculation = xlCalculationManual Application.ScreenUpdating = False '書出------- With rtSht .Select .Cells.ClearContents .Cells(2, 2).Resize(rtCnt, mxCnt).Value = dpTbl End With '出順調整--- mxCnt = ((mxCnt - 1) \ 3 + 1) * 3 With rtSht.Cells(2, 2).Resize(rtCnt, mxCnt) For i = mxCnt To 3 Step -3 .Sort _ key1:=.Cells(1, i - 2), _ order1:=xlAscending, _ key2:=.Cells(1, i - 1), _ order2:=xlAscending, _ key3:=.Cells(1, i), _ order2:=xlAscending Next i End With Application.Calculation = xlCalculationAutomatic End Sub 'ソート------------ Private Sub Sample_s( _ ByVal lvIdx As Long, _ ByVal lvOdr As Long, _ ByVal mnIdx As Long, _ ByVal mxIdx As Long) Dim tpVrb As Long Dim loCnt As Long Dim upCnt As Long Dim loIdx As Long Dim upIdx As Long Dim i As Long Dim j As Long If mnIdx >= mxIdx Then Exit Sub '両端確定--- loCnt = tbSiz loIdx = mnIdx upCnt = 0 upIdx = mxIdx For i = mnIdx To mxIdx If ctAry(odAry(i)) >= upCnt Then upCnt = ctAry(odAry(i)) upIdx = i End If If ctAry(odAry(i)) <= loCnt Then loCnt = ctAry(odAry(i)) loIdx = i End If Next i tpVrb = odAry(mxIdx) odAry(mxIdx) = odAry(upIdx) odAry(upIdx) = tpVrb tpVrb = odAry(mnIdx) odAry(mnIdx) = odAry(loIdx) odAry(loIdx) = tpVrb 'ソート----- i = mnIdx j = mxIdx Do Do i = i + 1 If i = mxIdx Then Exit Do Loop While orTbl(odAry(lvIdx), odAry(i)) = False Do j = j - 1 If j = mnIdx Then Exit Do Loop While orTbl(odAry(lvIdx), odAry(j)) = True If j <= i Then Exit Do tpVrb = odAry(i) odAry(i) = odAry(j) odAry(j) = tpVrb Loop '次の階へ--- i = i - 1 If mnIdx + 1 < i And i < mxIdx Then Call Sample_s(lvIdx + lvOdr, lvOdr, mnIdx + 1, i) End If j = j + 1 If mnIdx < j And j < mxIdx - 1 Then Call Sample_s(lvIdx + lvOdr, lvOdr, j, mxIdx - 1) End If End Sub '--------↑ココマデ↑------------------ ■追記 もし、わたしの回答が、 課題を解決する上でいくらかでもお役に立てたなら たいへんうれしく思いますが、 「横入り」とか「後出し」の是非はまた別の問題でして^^;;;; 締切りの際は【くれぐれもお間違えのないよう】 重ねてお願いします。 <(_ _)>
関連するQ&A
- エクセルVBAでVLookupを使って値を転記する
エクセル2003で商品の一覧表を作成しています。 Sheet1は商品一覧(左図) Sheet2は価格表(右図)となっています。 マクロを使用して、Sheet1のB列に価格表のデータを転記させたいと考えています。 VLookupになるのかと思い、自分でいろいろとやってみたのですが、 どうしても動作せず、挫折してしまいました。 商品一覧の最後の行までいって、空白セルがくると止まるというのが、 難しくてできませんでした。 どうかお願いいたします。
- ベストアンサー
- Visual Basic
- 2つの数字の組み合わせに対応する文字を返すコードを教えてください。
すみませんがお知恵を拝借させてください。下のような表で,B列の値に0~3,C列の値に0~3のいずれかを入れたとき,2つの数字の組み合わせに対応するA列にある名前を返すコードを教えていただけませんか。 例えば,B列の値=2,C列の値=0のとき,「酒井」と出力したいのですが。 ※2つの数字の組み合わせに重複はありません。範囲は下に書いた10名分のみです。よろしくお願いいたします。 ----------------------------------------- B列の値:_ C列の値:_ A列 B列 C列 ------------------- 大田 3 0 酒井 2 0 三宅 2 1 坂下 1 0 原田 0 0 山内 0 1 山口 1 1 相馬 1 2 渡辺 0 2 安藤 0 3
- ベストアンサー
- オフィス系ソフト
- 選択した行の値だけを合計
選択した行の値だけを、その行のどのセルをダブルクリックしても合計する方法を教えてください。 A列は、ID,B・C列は値があらかじめ入力されています。 D列に、合計を表示させたいです。 関数・VBAでは、一括して合計はでましたが、VBAで必要な行だけの合計の出し方がわかりません。 VBAの勉強のために活かしたいく、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルVBAでのまとめ計算
初めまして、よろしくお願いします。 データーで A B C D E ・・・ 1 5 7 2 2 3 7 0 3 4 6 3 6 5 2 8 3 6 0 3 4 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 100 3 4 5 という表がありますA列には(C列の値/(D列以降の平均値))をB列には(C列の値-(D列以降の平均値))を表示させたいと思います。たまに3行のような空白の行があります。関数式ではなく、VBAで解る方、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル 値が一致しないものを見つけたい
お世話になります。 エクセルでA列B列にそれぞれ数値が入っている表があり、A列にはあってB列にはない数値を分かるようにしたいと思っています。 A列 B列 C列 1行目 1 1 2行目 1 5 3行目 4 0 4 4行目 5 1 5行目 1 0 1 ・A1、A2、A5の値が1であるように、A・B列とも重複する数値が入ることがあります。 ・A列とB列の値は1対1で対応し、例えばA1がB1と対応するならA2はB4と対応します。 この表ではA3、A5に対応する値がB列にないので、C列にその値を表示させています。 ・一致しない数字を分かるようにする方法にこだわりはなく、例のようにC列に値や×を表示させる、A列に色をつける、一致するものがあった数値は削除する等、なんでも構いません。 お分かりになる方、どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 【エクセル】歯抜けの空白欄に上段と同じ値を入れたい
エクセル(2010)で ある表に ところどころ空欄があり、 そこに上段と同じ値を入れたいです。 随時発生する作業のため マクロ(もしくはVBA)が組めればと考えておりますが、 初心者につき、ご教示いただけますでしょうか。 A列:項番 B列:大項目 C列:中項目 D列:小項目 E列:備考 ※1行目:項目名、2行目以降:値 という表で、 A列のナンバリング・D列の小項目 以外は 上と同じ扱いとなるため空欄となってしまっていますが、 アクセス(DB)に取り込むため、空欄の無い形にしたいのです。 ※ちなみに、A列・D列は空欄が無い状態=最終行以下は空白です。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 【VBA】組み合わせの計算
VBAにてランダム(適当)な値10個の中で1.5に近い組み合わせを探し、それ以外の値を隣の列に移動させたいのですが、方法がわかりません。 どなたか教えてください
- ベストアンサー
- Excel(エクセル)
- Excel VBAにて座標読み込み・配置
当方、Excel VBAに関しては全くのド素人でございます。 お客さんに頼まれて、次のことをやりたいのですが、どうしたらよいか途方に暮れています。 (-50,-50)~(50,50)までの2mピッチの合計2601個のxyz座標データ(txt)をSheetに読み込み。 A列=x B列=y C列=z そしてAD列・26行のセルを座標(0,0)として、セルにz値を展開したいのです。 横軸=x 縦軸=y BC列・1行が(50,50) E列・51行が(-50,-50) 以上のことをExcel VBAでやりたいのですが・・・ 可能でしょうか? 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA 変数Aと変数Bの組み合わせに対応する値を返すコード
ワークシート上に次の表があり,この表をもとにして,変数A(0~4)と変数B(0~4)の組み合わせに対応するC列の値を返すコードは,どう書いたらよいでしょうか。 例えば,変数Aのセルに●(4),変数Bのセルに▲(0)と入力したら,値のセルに■(5)と表示させたいのです。 どなたか教えていただけませんか。 A列 B列 C列 4 0 5 3 1 4 3 0 5 2 2 3 2 1 4 2 0 4 1 3 2 1 2 2 1 1 3 1 0 3 0 4 1 0 3 1 0 2 2 0 1 3 0 0 3 変数A:● 変数B:▲ 値:■
- ベストアンサー
- オフィス系ソフト
お礼
コメントが遅くなりまして申し訳ありません。excel2007が入っているパソコンをしばらくの間使用することができなかったために、プログラムを動かすことができなかったためです。実際にexcel2007にてプログラムを動かしましたら、3分程度で出力ができました。ありがとうございました。 ひょっとしたらこの件で、また伺いたいこっとがあるかもしれません。その場合に改めてアドバイスを頂けますと幸いです。よろしくお願いします。 余談ですがベストアンサーが1件しか選ぶことができないのが、つらいです。
補足
久しぶりに書き込みをします。新たに質問をさせてください。 パターン数がエクセル2007の最大行数である104万8576行を超える場合に、 新たに列を変えて続きを出力させることはできますでしょうか? 返信頂けますとありがたいです。よろしくお願いします。