長話短說……我有一個 CSV 檔案,象征性地看起來像這樣:
源 CSV。
我一直試圖讓 Excel 用高于或低于它的值填充每列中的每個空白單元格。例如,我希望 A 列的所有內容都包含“a”,而 E 列中的所有內容都包含以下值:2,2,2,2,e,e,e,e,e。這是想要的結果:
目標 CSV。
真正的 CSV 有 10,000 多行,因此手動執行此操作需要數天時間。
我想做的是轉置電子表格資料,將其放入 Notepad 并嘗試使用正則運算式。
這是我的表達(如果遇到錯誤,請點擊“測驗”,然后再次點擊“文本”),但它并沒有給我想要的東西。
文中:
a,,,,,,1,,,,2,,,,,,,,,,,5,,,,,,,,,4
,b,,,2,,,,,,,,,,,,4,,,,,,,,5,,,,,,5
,,c,,,,,3,,,,,,,,,,,,,,,,,,,,,,,
,,,d,,,,,,,,6,,,,,,,,,,,,,,,,,,,
,,,,e,,,,,,,,,,,,6,,,,,3,,,,,,,,,1
,,,,,f,,,,,,2,,,,,,,,,,,,,,,,,,,
,,,,,,g,,,,,,,,,2,,,,,,,,,7,,,,,,
,,,,,,,h,,,,,,,,,,,,,,,,,,,,,,,2
,,,,,,,,f,,,0,,,,,,,,,,,,,9,,,,2,,
代替:
([A-z0-9]),|,,
和:
$1
結果:
a,1,254
,b2,4,5,5
c3
,d,6
e,631
,f,2
g27,
,h2
f09,2,
想要的結果:
a,a,a,a,a,a,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,4
b,b,b,b,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5
c,c,c,c,c,c,c,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
d,d,d,d,d,d,d,d,d,d,d,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,6,6,6,6,6,3,3,3,3,3,3,3,3,3,1
f,f,f,f,f,f,f,f,f,f,f,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7
h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,2
f,f,f,f,f,f,f,f,f,f,f,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,2,2,2
換句話說:
- 在行中搜索兩個逗號之間的第一個字符(或字串);
- 將此字符放在任何間隙中(在兩個連續的逗號之間),直到找到新的字符或字串;
- 如果該行以逗號開頭,請找到該行中的第一個字符或字串,然后用該字符或字串替換任何前面的空白。
As far as I can tell, I'm telling it to find any alphanumeric character followed by a comma or a comma followed by a comma and to replace each instance with the first token (alpha). But what it seems to be doing is treating alpha comma and every comma comma thereafter as one token group. How can I make it so that each alpha comma or comma comma is its own group and is replaced with the token (alpha) and a comma?
uj5u.com熱心網友回復:
假設您的電子表格的一部分如下所示。
A B C D E F G
-------------
1|a 1 2
2| b 3 4
3| c 5
4| d 6 7
5| 8 e
6| 9 f
7| 0 g
據我了解,您希望計算以下內容,其中第 11 行對應于第 1 行,第 12 行對應于第 2 行,依此類推。
A B C D E F G
-------------
11|a b 1 3 5 2 4
12|a b 1 3 5 2 4
13|a b c 3 5 2 4
14|a b c d 5 6 7
15|a 8 c d e 6 7
16|a 8 9 d e f 7
17|a 8 9 0 e f g
單元格 A11 等于單元格 Ar 中的值,其中 r, 1 <= r <= 7,是使單元格 An 非空的最小行號。(我多年沒有使用 Excel,但我記得該行是使用“索引”公式確定的。) B11、B12 等的計算方法類似。
如果 A2 非空,則單元格 A12 等于 A2 的內容;否則它等于 A11 中的值。單元格 B12-G12 的計算方法類似。
單元格 A13 是從單元格 A3 和 A12 類似地計算出來的。所有剩余的單元格都以相同的方式計算:單元格 cr 是根據單元格 c(r-10) 和 c(r-1) 計算的。
uj5u.com熱心網友回復:
這不是最有效的宏,但對我有用。嘗試解決問題也很有趣,盡管聽起來很悲傷。隨意使用它或使用其他方法。
所做的假設是它應該先向上看,然后再向下看。
Public Sub DoSmartFillDownAndUp()
Dim objCell As Range, bFinished As Boolean
Application.EnableEvents = False
Do While bFinished = False
For Each objCell In Selection
If objCell.Value = "" Then
If objCell.Row > 1 Then
objCell.Value = objCell.Offset(-1, 0).Value
End If
End If
If objCell.Value = "" Then
objCell.Value = objCell.Offset(1, 0).Value
End If
Next
bFinished = True
For Each objCell In Selection
If objCell.Value = "" Then
bFinished = False
Exit For
End If
Next
Loop
Application.EnableEvents = True
End Sub
將其放入新模塊,選擇要運行資料的范圍,然后觸發宏。
uj5u.com熱心網友回復:
感謝 Rory -- Power Query Editor 正是我所需要的。您只需打開資料源,然后在“轉換”選項卡上,選擇所有列并執行“填充”和“向下填充”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368639.html
