การจำลองรูปแบบสูตรใน Excel


0

นี้ฉันมีสเปรดชีทที่มีลักษณะเช่นนี้:

ฉันต้องการเติมข้อมูลตารางที่สองโดยใช้ค่าจากตารางแรก ชัดเจน (และลำบากทาง) จะทำเช่นนี้ด้วยตนเองเช่น B7 จะมีสูตร=B2B8 จะเป็น=D2เช่นนั้น

มีวิธีให้ Excel จดจำรูปแบบเช่นหนึ่งคอลัมน์ในตารางที่สองเท่ากับทุกค่าที่สองในแถวในตารางแรกหรือไม่ เมื่อฉันพยายามลากด้านล่างขวาของเซลล์มีการติดตามรูปแบบที่ไม่ถูกต้อง


วิธีที่คุณอธิบายด้วยตนเองจะใช้งานได้ - ฉันไม่แน่ใจว่าทำไมคุณถึงรู้สึกว่ามันลำบากดังนั้นฉันสงสัยว่าคุณ "โง่" คำถามเพื่อให้กระชับ (ซึ่งเจ๋ง) แต่คุณอธิบายได้ไหมว่าทำไมมันถึงได้โปรด :)
เดฟ

ใช่ฉันมี 'โง่' คำถาม ข้อมูลจริงที่ฉันจัดการอยู่นั้นเป็นตารางที่ใหญ่กว่ามากและจะต้องมีการทำซ้ำในชุดข้อมูลที่คล้ายกันในอีกหลายปีข้างหน้า
M Agil

VBa เป็นตัวเลือกหรือไม่? เป็นวิธีเดียวที่จะทำให้สิ่งนี้เป็นอัตโนมัติ
Dave

โซลูชันของ Mate ทำงานได้อย่างสมบูรณ์แบบขอบคุณ :)
M Agil

คำตอบ:


1

ไม่ไม่มีวิธีที่แน่นอนสำหรับเรื่องนี้คุณได้แก้ไขสองวิธี:

  1. ด้วยการโยกย้าย:

    • ลบคอลัมน์ที่ว่างเปล่า
    • เลือกข้อมูลของคุณและกด CTRL + C
    • กลับบ้าน - วาง - ขนย้าย
  2. ด้วยสูตร

    • เติมส่วนหัว
    • ใน B7 ป้อน =INDEX($B$2:$H$4,MATCH(B$6,$A$2:$A$4,0),MATCH($A7,$B$1:$H$1,0))
    • เติมสูตรลงและขวา

0

ฉันหมดเวลาดังนั้นฉันจึงไม่ได้สัญญาว่าจะมีประสิทธิภาพหรือแม้แต่เขียนโค้ดได้ดี แต่ VBa นี้ใช้งานได้ (แก้ไขและไม่ทราบว่าคุณมีคำตอบที่ยอมรับได้ แต่จะดำเนินการต่อไป)

ไม่มีตัวเลือกเลิกทำเมื่อใช้งาน VBa ดังนั้นควรสำรองข้อมูลก่อน

Option Explicit

Sub doTheThing()

Dim userStartRowInColA As Integer
userStartRowInColA = 2                   'update this as needed, in your example I assume the rows start on row 2

Dim userColDifference As Integer
userColDifference = 2                   'in your example, the top table is every 2 rows, hence the 2



Dim startRowInColA As Integer
startRowInColA = userStartRowInColA

Dim vals As String
vals = ""

Dim items As String
items = ""

Dim valsMissedTwo As Boolean
valsMissedTwo = False

Dim startCol As Integer
startCol = 65

Do While (True)

Dim col As String
col = Chr(startCol)

If Range(col & 1).Value = "" And valsMissedTwo Then
    Exit Do
Else
    valsMissedTwo = False
End If

If Range(col & 1).Value = "" And Not valsMissedTwo Then
    valsMissedTwo = True
End If

If Range(col & 1).Value <> "" Then
    vals = vals + Range(col & 1).Value + ","
End If


startCol = startCol + 1
Loop



Do While Range("A" & startRowInColA).Value <> ""

items = items + Range("A" & startRowInColA).Value + ","

startRowInColA = startRowInColA + 1
Loop


Dim table2StartCol As Integer
Dim table2StartRow As Integer
table2StartRow = startRowInColA + 1
table2StartCol = 66


Dim splitVals() As String
splitVals = Split(vals, ",")

Dim splitItems() As String
splitItems = Split(items, ",")

'add the items as cols
For startCol = 1 To UBound(splitItems)
    If splitItems(startCol - 1) <> "" Then
        Range(Chr(65 + startCol) & startRowInColA + 5).Value = splitItems(startCol - 1)
    End If
Next startCol


'add the vals on left as rows

For startCol = 1 To UBound(splitVals)
    If splitVals(startCol - 1) <> "" Then
        Range("A" & startCol + startRowInColA + 5).Value = splitVals(startCol - 1)
    End If
Next startCol

'now to populate

Dim sr As Integer
sr = startRowInColA + 6

Dim sc As Integer
sc = 66

Dim oSr As Integer
oSr = userStartRowInColA


Dim i As Integer
i = 0

Dim j As Integer
j = 0



Do While (True)
Do While Range(Chr(sc) & oSr).Value <> ""

    Range(Chr(sc + i) & sr).Value = Range(Chr(sc + j) & oSr).Value

i = i + 1
oSr = oSr + 1

Loop

j = j + userColDifference
i = 0
oSr = userStartRowInColA
sr = sr + 1
If Range("A" & sr).Value = "" Then
    Exit Do
End If

Loop


End Sub

ก่อน

ป้อนคำอธิบายรูปภาพที่นี่

หลังจาก

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นคุณไม่จำเป็นต้องสร้างตารางที่สองมันจะทำโดยอัตโนมัติ

ฉันจะเพิ่ม VBA ใน MS Office ได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.