excel vba編程,是在一段表格中插入幾行后,插入行后的行整體下移,不破壞原有數據內容,


Range(Rows(3), Rows(5)).Insert shift:=xlDown
1)在當前單元格處插入一行  ; 可以增加循環語句來實現插入多行
Range("A10").Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

2)在當前選擇行處插入與選擇行數相同的行數; 可更改行號來實現不同地方的插入。
Rows("10:11").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
3)將range換成sheet1.cells(x,y) 或range(cells(x1,y1),cells(x2,y2)) 則可用程序來控制插入的位置

EXCEL中VBA或者函數怎么自動插入新數據?

我會用函數,VBA知道一點,請問:如何在圖中當C列出現大於4.8和小於0.2的數值后,自動插入下一個ZD9。就是圖中K294+920后面出現了-0.363

解釋一下圖中數據的計算方法:第一個 ZD8所在行9和行10的數據手動輸入。A列中K294+880和E列3174.967G列3174.97在另一個工作表中排列好了的,可以直接調用。他 后面的C列數值叫前視,C11=$D$10-E11,C12=$D$10-E12,C13=$D$10-E13     

ZD9后 面C14是根據上圖中K294+920后面出現了-0.363(小於0.2),就隨機一個0.2到0.5的數。如果上圖中K294+920后面出現了 7.652(大於4.8)時,就隨機一個4.2到4.8的數。E14=D10-C14    B15也是一個隨機數,是根據上圖中K294+920后面出現了-0.363(小於0.2),就隨機一個4.2到4.8的數。如果上圖中 K294+920后面出現了7.652(大於4.8)時,就隨機一個0.2到0.5的數。D15=E14+B15

這個ZD9就完成了。下邊的C16=$D$15-E16,C17=$D$15-E17,C18=$D$15-E18 就是這樣,如果下邊的C列又出現大於4.8或者小於0.2的數,又插入下個點ZD10,如此循環。

如果沒有說明白,請聯系QQ313616791或者電話18048795658   

那個7.652是假設的。那么我告訴你到底怎么做:我要這樣幾個過程,
(1.)當C列出現小於0.2或者大於4.8的數值后,插入兩行,這個叫轉點。
(2)這兩行里的數據符合這樣的要求,
ZD9那個9=上一個ZD8后面的8+1,是下一個轉點的意思。 顯然在下一個就應該是ZD10,ZD11,ZD12 ,ZD13....... 這樣吧,轉點ZD就從ZD1開始。
根據你圖一數據及要求寫了一段代碼,看是不是滿足要求:
1、運行前請備份原始數據表,切記!
2、為了便於檢查,會自動在相關單元格寫入公式。
3、代碼直接放到圖一的“水准測量記錄”表的代碼頁中,如果寫在模塊中,請自行修改代碼。代碼運行后會生成圖二的樣子,只能運行一次,再次運行時必須保證數據格式是圖一(原表)的格式。由於有幾個數據是隨機數,多次測試結果會不同。
4、默認圖一E列是已知數據。

Sub 插入數據()
Dim i As Long
Dim k As Long
Dim n As Long
n = 8
k = 10
With ActiveSheet
For i = 11 To 65536
If .Cells(k, 4).Value - .Cells(i, 5).Value >= 0.2 And .Cells(k, 4).Value - .Cells(i, 5).Value <= 4.8 Then
.Range("C" & i) = "=$D$" & k & "-E" & i
Else
If .Cells(k, 4).Value - .Cells(i, 5).Value >= 4.8 Then
.Rows(i).Insert Shift:=xlDown
.Range("A" & i) = "ZD" & n + 1
.Range("C" & i) = "=Round(rand() * (4.8 - 4.2) + 4.2, 3)"
.Range("E" & i) = "=$D$" & k & "-C" & i
.Rows(i + 1).Insert Shift:=xlDown
.Range("B" & i + 1) = "=Round(rand() * (0.5 - 0.2) + 0.2, 3)"
.Range("D" & i + 1) = "=E" & i & "+B" & i + 1
ElseIf .Cells(k, 4).Value - .Cells(i, 5).Value <= 0.2 Then
.Rows(i).Insert Shift:=xlDown
.Range("A" & i) = "ZD" & n + 1
.Range("C" & i) = "=Round(rand() * (0.5 - 0.2) + 0.2, 3)"
.Range("E" & i) = "=$D$" & k & "-C" & i
.Rows(i + 1).Insert Shift:=xlDown
.Range("B" & i + 1) = "=Round(rand() * (4.8 - 4.2) + 4.2, 3)"
.Range("D" & i + 1) = "=E" & i & "+B" & i + 1
End If
k = i + 1
n = n + 1
i = i + 1
End If
If .Range("E" & i + 1) = "" Then Exit For
Next i
End With
End Sub
這就好理解了,我重復一遍,你確認一下。當c列中出現小於0.2或者大於4.8的數值后,在該行的上方插入兩個空行,並且在A列寫入ZD+編號。其他都留空白。

Sub InsertRow()
Dim LastRow As Long, i As Long, j As Long
Application.CutCopyMode = False
LastRow = Cells(Cells.Rows.Count, 3).End(3).Row
i = 1
Do
If IsNumeric(Cells(i, 3)) And Len(Cells(i, 3)) > 0 Then
If Cells(i, 3) < 0.2 Or Cells(i, 3) > 4.8 Then
Rows(i & ":" & i + 1).Insert shift:=xlDown
j = j + 1
Cells(i, 1) = "ZD" & j
i = i + 2
LastRow = Cells(Cells.Rows.Count, 3).End(3).Row
End If
End If
i = i + 1
Loop Until i > LastRow
End Sub




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM