ง่าย (ฉันหวังว่า) คำถามเกี่ยวกับ Excel


0

ฉันกำลังทำไดเรกทอรีสำหรับพื้นที่ใกล้เคียงของฉัน เรามีข้อมูลส่วนใหญ่จากไดเรกทอรีก่อนหน้า ข้อมูลถูกป้อน: ชื่อ A1, ที่อยู่ B1 และหมายเลขโทรศัพท์ C1; ชื่อ B1, ที่อยู่ B2, หมายเลขโทรศัพท์ C2 เป็นต้นผู้เผยแพร่ต้องการข้อมูลในรูปแบบอื่นชื่อ A1, ที่อยู่ A2, หมายเลขโทรศัพท์ A3, A4 ว่างเปล่า; ชื่อ A5, ที่อยู่ A6, หมายเลขโทรศัพท์ A7, A8 ว่างเปล่า ฯลฯ ... มีวิธีที่ง่าย (หรือ heck - ไม่ใช่เรื่องง่าย) ที่จะให้ Excel เปลี่ยนรูปแบบของข้อมูลโดยที่ฉันไม่ต้องพิมพ์ข้อมูลในครัวเรือน 1300 ครัวเรือน?

ฉันจะต้องฟอร์แมตข้อมูลเป็นครั้งที่สองเป็นกากบาด รูปแบบสำหรับรูปแบบนั้นคือ: ชื่อ A1 ถนนหมายเลขที่อยู่ A2 ชื่อผู้อาศัย B2 และหมายเลขโทรศัพท์ C2


ในขณะที่มีคำตอบที่เกี่ยวข้องกับการเขียนโปรแกรมสำหรับคำถามนี้สิ่งที่ชัดเจนที่สุดเกี่ยวข้องกับการคัดลอกและไม่เกี่ยวข้องกับการเขียนโปรแกรม

เพียงชี้แจงสิ่งที่คุณต้องการ แต่ละระเบียนจะถูกป้อนในแนวนอนในแถวและคุณต้องการแปลงให้เป็นระเบียนแนวตั้งที่มีช่องว่างระหว่างระเบียนหรือไม่ ถ้าเป็นเช่นนั้นสามารถทำได้โดยใช้แมโครได้ง่ายๆ
datatoo

ควรแก้ไขชื่อเรื่องนี้เพื่อให้สะท้อนคำถามได้ดีขึ้น
kzh

คำตอบ:


2

Excel มีคุณสมบัติในการทำเช่นนั้น ย้ายจาก A1 A2 A3 ไปยัง A1 B1 C1 เลือกข้อมูลที่เป็นปัญหาคัดลอกจากนั้นไปที่พื้นที่ที่คุณต้องการผ่านมัน จากนั้นไม่เพียง แต่วาง แต่ผ่าน "อดีตที่ผ่านมาพิเศษ" (หรือวางเนื้อหาหรือสิ่งที่มันพูดว่าในเยอรมันมันบอกว่า "inhalte einfügen" ;-)) กล่องโต้ตอบที่จะเกิดขึ้นมีเด็กชายเช็คทรานส์ที่จะช่วยให้คุณประสบความสำเร็จในการแก้ปัญหาของคุณ


ใช่ +1 และคุณสามารถรวมสิ่งนี้ลงในแมโครและทำทั้งชีตได้อย่างง่ายดาย ถ้านั่นคือสิ่งที่คุณพยายามจะทำ
datatoo

การแปลงจะไม่ได้รับการจัดเรียงคอลัมน์เดียวที่เธอต้องการ - มันจะพลิกข้อมูล 90 องศา
Martha

2

เพิ่มมาโครนี้ใน excel ของคุณและเรียกใช้ 'MyTranspose' เมื่อแผ่นงานที่มีข้อมูลที่อยู่ของคุณถูกเลือก

Option Explicit

'Copy all the data from the active sheet into a  new worksheet
' and transpose all the columns into a single column
Sub MyTranspose()
    Dim r As Range
    Dim wsNew As Worksheet
    Dim wsCurrent As Worksheet

    Set wsCurrent = ActiveSheet
    Set wsNew = Worksheets.Add(Before:=Sheets(1))

    For Each r In wsCurrent.UsedRange.Rows
        r.Copy
        wsNew.Cells(LastRowOnWS(wsNew, 1) + 2, 1).PasteSpecial Transpose:=True
    Next r

    Application.CutCopyMode = False
    Set wsCurrent = Nothing
    Set wsNew = Nothing
End Sub

'Find the last row used in column 'col'
Function LastRowOnWS(ByVal ws As Worksheet, _
                     Optional ByVal col As Long = 1) As Long
    LastRowOnWS = ws.Cells(65536, col).End(xlUp).Row
End Function

1

อันแรก - แปลงตารางข้อมูลเป็นคอลัมน์เดียวโดยมีแถวว่างคั่นแต่ละระเบียน - จริง ๆ แล้วฉันจะทำใน Word คัดลอก & amp; วางข้อมูลลงใน Word แปลงตารางเป็นข้อความโดยใช้ Tab เป็นตัวคั่นคอลัมน์แทนที่แต่ละย่อหน้าที่มีอยู่ด้วยเครื่องหมายวรรคสอง (^ p กับ ^ p ^ p) แทนที่แต่ละแท็บด้วยเครื่องหมายย่อหน้า (^ t ด้วย ^ p) และคัดลอกและวางผลลัพธ์กลับเข้าไปใน Excel

สำหรับงานที่สองหากที่อยู่มีการจัดรูปแบบตามปกติของสหรัฐอเมริกา - 123 ถนนสายหลัก - คุณจะต้องใช้ฟังก์ชันการจัดการข้อความของ Excel เพื่อแยกหมายเลขที่อยู่ออกจากชื่อถนน หากที่อยู่ในคอลัมน์ B (และมีที่ว่างหนึ่งช่องเสมอคั่นตัวเลขจากถนน) จากนั้นใน D1 ให้ใส่

=Trim(Left(B1,Find(" ",B2)))

และใน E1 ใส่

=Trim(Right(B1,Len(B1)-Len(D1)))

และเติมลงไป จากนั้นก่อนหน้านี้ให้ใช้ Word เพื่อแทนที่แท็บด้วยเครื่องหมายย่อหน้าอย่างมีกลยุทธ์เพื่อรับการจัดเรียงที่คุณต้องการ

ถ้ามันโง่ แต่ก็ใช้งานได้มันไม่ใช่คนโง่ :)


ผิดปกติ แต่ดูเหมือนว่าจะทำงาน!
DaveParillo


0

คำถามนี้ดีกว่าอยู่ http://superuser.com แต่เนื่องจากคุณได้ขอใน SO ซึ่งเป็นเว็บไซต์อภิปรายการเขียนโปรแกรม ...

ฉันจะทำสิ่งต่อไปนี้อย่างแน่นอน:

  1. ส่งออกข้อมูลไปยังไฟล์. csv
  2. จัดการไฟล์. csv ด้วยภาษาการเขียนโปรแกรมที่ทรงพลังเช่น Python
  3. นำเข้าไฟล์. csv ใหม่กลับไปที่ excel

การเรียนรู้เครื่องมือดังกล่าวสามารถเป็นประโยชน์กับทุกคนไม่ใช่แค่โปรแกรมเมอร์!

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