Tôi có một cơ sở dữ liệu của một số công ty. Có một kỷ lục cho mỗi công ty. Trong mỗi hồ sơ công ty, có nhiều liên hệ.
Làm cách nào tôi có thể tạo một bản ghi cho mỗi LIÊN HỆ (lưu giữ tất cả thông tin công ty giống nhau cho từng)?
Đây là một mẫu:
Tôi có một cơ sở dữ liệu của một số công ty. Có một kỷ lục cho mỗi công ty. Trong mỗi hồ sơ công ty, có nhiều liên hệ.
Làm cách nào tôi có thể tạo một bản ghi cho mỗi LIÊN HỆ (lưu giữ tất cả thông tin công ty giống nhau cho từng)?
Đây là một mẫu:
Câu trả lời:
Điều này sẽ đủ cho ví dụ của bạn. Bạn sẽ cần sửa đổi một chút để phù hợp với cơ sở dữ liệu thực.
Example Data
Company | Address | City | State | ZIP | Phone | GM | EmailGM | PD | EmailPD | SM | EmailSM | PRM | EmailPRM
ABC | 1234 M | Saint | MN | zip | phone | gm | gm1@gm | pd | pd1@pd | sm | sm1@sm | prm | prm@prm
Result
Company | Address | City | State | ZIP | Phone | Name | Email
ABC | 1234 M | Saint | MN | zip | phone | gm | gm1@gm
ABC | 1234 M | Saint | MN | zip | phone | pd | pd1@pd
ABC | 1234 M | Saint | MN | zip | phone | sm | sm1@sm
ABC | 1234 M | Saint | MN | zip | phone | prm | prm1@prm
Company column (and Address, City, State, ZIP, Phone)
=INDIRECT("A"&(CEILING((ROW()+1)/4-1, 1)))
Name column (and Email)
=INDIRECT(CHAR(CODE("G")+MOD((ROW()-2), 4)*2)&CEILING((ROW()-1)/4+1, 1))
Tại cột Công ty, công thức đề cập đến "A"
cột và số hàng được tính từ hàng hiện tại.
ROW()-1
điều chỉnh lại số hàng, bởi vì chúng ta có tiêu đề trong bảng dữ liệu. Chúng tôi sử dụng số 1 vì dữ liệu bảng dữ liệu bắt đầu ở hàng 2 , thay vì hàng 1 .
/4 + 1
về cơ bản sao chép hàng kết quả 4 lần , sau đó điều chỉnh số hàng kết quả theo một, bởi vì chúng ta có tiêu đề trong bảng dữ liệu. Chúng tôi sử dụng số 4 vì chúng tôi có 4 tên và email . Chúng tôi sử dụng số 1 vì dữ liệu bảng dữ liệu bắt đầu ở hàng 2 , thay vì hàng 1 .
CEILING( ... , 1 )
làm tròn số hàng lên tới một số nguyên.
Tại cột Tên, công thức đề cập đến "G"
cột và số hàng được tính từ hàng hiện tại.
(ROW()-2)
thay đổi kết quả MOD
trở lại 0
. Chúng tôi sử dụng số 2 vì dữ liệu bảng kết quả bắt đầu ở hàng 2 .
MOD( ... , 4)
tính toán cột nào để có được. Kết quả của 0
cột có nghĩa là cột G
, 1
có nghĩa là cột H
, v.v. Chúng tôi sử dụng số 4 vì chúng tôi có 4 tên và email .
+ ... * 2
dịch chuyển cột được tải về bên phải của cột G
bằng the result of modulo, multiplied by 2
. Chúng tôi sử dụng số 2 vì chúng tôi có 2 cột, Tên và Email, để tìm nạp.
CODE("G")
chuyển đổi char "G" thành mã ASCII của nó.
CHAR( ... )
chuyển đổi giá trị của cột đã dịch chuyển (7 thành 11, nghĩa là "G" thành cột "K" chẳng hạn) trở lại chuỗi.
CEILING( ... )
đưa ra số hàng dữ liệu được tìm nạp.
Chỉ cần thay đổi chữ cái cột thành cột phù hợp.
Thí dụ:
cho cột Địa chỉ, thay đổi chữ cái "A"
thành"B"
cho cột Email, thay đổi chữ cái "G"
thành"H"
Bạn đã đề cập bạn sẽ có 7 tên và email . Bạn sẽ cần điều chỉnh công thức để sử dụng 7 thay vì 4.
Công thức này nhạy cảm với nơi bạn đặt công thức này. Công thức này giả định rằng bạn sẽ đặt nó ở hàng 2 (hàng 1 cho tiêu đề). Bạn sẽ cần điều chỉnh nếu bạn đặt nó ở hàng 1 (xem Giải thích )
Công thức này không bỏ qua tên trống và email. Tất cả các công ty sẽ có chính xác 4 hàng, bất kể số lượng tên và email có sẵn.
Điều này không nhằm thay thế cơ sở dữ liệu , nhưng bạn có thể sử dụng dữ liệu được tạo bởi công thức này để tạo cơ sở dữ liệu.
Một cách khác để làm điều này, trong Excel, là với Power Query
hoặc Data ► Get and Transform ► From Table
(phụ thuộc vào phiên bản Excel)
Sau khi vào trình soạn thảo truy vấn, chọn các cột lặp lại và UNPIVOT các cột khác. Điều này sẽ cung cấp cho bạn một bảng như thế này:
Lưu ý rằng tôi đã đổi tên các cột mới được tạo bởi hoạt động UNPIVOT.
Bây giờ thêm một cột thứ ba, gắn nhãn "Email" và nhập công thức này vào I2
I2: =IF(ISERR(SEARCH("email",[@Position])),H3,"")
Sau đó, nó chỉ đơn thuần là vấn đề lọc các Khoảng trống từ cột Email. Bạn có thể làm điều đó với một bộ lọc đơn giản; sau đó sao chép / dán các ô hiển thị vào vùng kết quả; hoặc bạn có thể sử dụng Bộ lọc nâng cao, có cơ chế gửi kết quả của bộ lọc đến khu vực được chỉ định: