Board logo

標題: 回傳有值的儲存格應對第一列的資料 [打印本頁]

作者: wei9133    時間: 2020-5-3 02:16     標題: 回傳有值的儲存格應對第一列的資料

目前需求為
統計該列指定區域(A區)有值的欄位,回傳第一列的值,寫在da欄位
另一個指定區域(B區)有值的欄位,回傳第一列的值,寫在db欄位
若碰到目前A/B兩區皆無有值欄位,則停止往下執行 (中間會有其他輔助列,會有內容,所以要避開)
東西大概像附件這個樣子
A區 $A2:$AU2
       
B區 $AW:$CQ2

[attach]31993[/attach]

da & Db 欄位可以用公式或vba,可以的話都告訴我怎麼弄。
因為目前資料庫已經快6000行了,用vba需要時才執行是否會比公式每次更動就計算一次操作方便呢?
或著都拉完公式後用選擇性貼上>值,應該也可以。

其實最後是想比對有無重複列,弄成這樣篩選比較好篩而已
只要篩da跟db不用A區一個一個篩一遍B區一個一個篩一遍
作者: hcm19522    時間: 2020-5-3 09:45

類似提  參考
https://blog.xuite.net/hcm19522/twblog/589095820
作者: wei9133    時間: 2020-5-13 23:32

回復 2# hcm19522
[attach]32016[/attach]
你好,將範例照你所述
K8:B9 放進下面公式,出來的東西不對
=IFERROR(IF(COLUMN(A1)=1,""," ,")&INDEX($A$1:$AU$1&":"&$A2:AUI2,SMALL(IF($A2:$AU2,COLUMN($A:$G)),COLUMN(A1)))&L8,"")
版本是office2003
還有公式中間的
SMALL(IF($C2:$I2,COLUMN($A:$G)
為何是A:G呢?表格內容不是C:J嗎?

然後Small
SMALL(array,k)
傳回資料組中第 k 小的值。

我的內文不是數字,是文字,會有影響嗎?
作者: hcm19522    時間: 2020-5-14 10:03

回復 3# wei9133

2003版無IFERROR
COLUMN(A:G)-->1~6   
SMALL(IF($C2:$I2,COLUMN($A:$G)-->$C2:$I2 C合乎條件為1   I合乎條件為6
合乎條件取位置值 非計算   內文是數字 文字,不會有影響
作者: Andy2483    時間: 2023-12-13 14:32

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA找出範圍儲存格中的重複列或空列,學習方案如下,請各位前輩指教
執行前:
[attach]37124[/attach]

執行結果:
[attach]37125[/attach]

Option Explicit
Sub 選取重複或空白列()
Dim Brr, Z, i&, j%, T$, T1$, xU As Range, C%
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([CQ1], Cells(ActiveSheet.UsedRange.Rows.Count, "A"))
'↑令Brr變數是帶入指定範圍儲存格值的二維陣列
C = UBound(Brr, 2): T1 = Application.Rept("/", C)
'↑C變數是Brr陣列橫向最大索引欄號,令T1變數是C變數個連續"/"符號的字串
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2到 Brr陣列縱向最大索引列號
   For j = 1 To C: T = T & "/" & Brr(i, j): Next
   '↑設順迴圈!j從1到 C變數,令T變數是以"/"符號連接各迴圈陣列值的新字串
   If Z(T) <> "" Or T = T1 Then
   '↑如果以T變數查Z字典回傳item不是空的 或T變數同 T1變數?
      If xU Is Nothing Then
      '↑如果xU變數是空的?
         Set xU = Cells(i, 1)
         '↑令xU變數是 i迴圈列A欄儲存格
         Else
         Set xU = Union(xU, Cells(i, 1))
         '↑否則就令 i迴圈列A欄儲存格納入 xU變數中
      End If
   End If
   Z(T) = 1: T = ""
   '↑令Z字典中 key為T變數的 item值是1,令T變數清空
Next
If xU Is Nothing Then MsgBox "沒有重複列": Exit Sub
'↑如果xU變數還是空的!就跳出提視窗~~~,之後結束程式執行
xU.EntireRow.Select
'↑如果xU變數不是空的!就將其所在的列選取
End Sub
作者: singo1232001    時間: 2023-12-13 16:42

Sub t3()
i = Split("Provider=Microsoft.,Jet.OLEDB.4,.0;Extended Properties=Excel ,8,.0;Data Source=", ",")
If Application.Version > 12 Then i(1) = "ACE.OLEDB.12": i(3) = 12
Set cn = CreateObject("adodb.connection"): cn.Open Join(i, "") & ThisWorkbook.FullName
For i = 1 To 47
x = x & "& iif(IsNull([" & i & "]),"""",""." & i & """)"
Next
q = "select mid(b,2,999) from(" & "select " & Mid(x, 2, 99999) & " as b from "
[cv:cx].ClearContents: [CV2].CopyFromRecordset cn.Execute(q & "[sheet1$a1:au])")
[CW2].CopyFromRecordset cn.Execute(q & "[sheet1$aw1:cq])")
[CX2].CopyFromRecordset cn.Execute("select F1 &""&"" &F2 from [sheet1$CV1:CW]")
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)