Chuyển đổi dữ liệu

Liên hệ QC
Thực vậy, em đang dùng land desktop .Nhưng số liệu khảo sát cấp lên ở đạng TOPO (có đuôi .ntd) số liệu này muốn thiết kế được chuyển qua dang của Land, với các phiên bản 3.0 về trước thì sau khi chuyển số liệu là ổn, nhưng với số liệu của các bản 3.5 trở lên hay số liệu đã được mở bằng nova bản cao hơn 4.0 thì khi gi lại nó bị đảo không thể chuyển sang dạng đúng của land nữa, muốn thiết kế em phải chỉnh thủ công lại như vậy đó. (Anh thử xem chỉnh lại cho em cao đọ sang tương đối như em viết ở #17 và chuyển thêm ô lý trình sang nữa anh nhé, ở trong maco anh viết chưa chuyển qua. Em gửi các anh file em đã thực hiện bằng mã của anh viết) Hii hơi tham quá !!!

Oh, thế này bạn phải phiền bác SA_... tiếp nữa thôi,
Mong Bác SA_DQ giúp bạn tiếp..
 
Cái anh chàng (Hổ)^2 này vẽ chuyện ra rồi đá banh cho người khác, Thật tệ ghê!

Oh, thế này bạn phải phiền bác SA_... tiếp nữa thôi, Mong Bác SA_DQ giúp bạn tiếp..

Bạn Hừu Thành sửa tự ên nha, dòng lệnh có đánh số đó. Bạn thêm vô bản gốc 2 dòng này;
Đáng lý chỉ thêm dòng 9 mà thôi; nhưng nhìn dữ liệu của bạn thấy quá nhiều, thêm dòng 4 vô, để màn hình khỏi 'lắc lư cái đầu, là lắc lư cái đầu. . ."

PHP:
Option Explicit
Const GiaTri As Double = 400
Sub CopyFor0()
 Dim lRow As Long, jJ As Long, RowB As Long, Row0 As Long
 Dim Rng As Range
 
 Sheets("S1").Select:               lRow = [a65432].End(xlUp).Row + 1
4 Application.ScreenUpdating = False
 For jJ = 2 To lRow
    With Cells(jJ, 1)
        If Not IsNumeric(.Value) Then
            .Resize(1, 2).Copy Destination:=.Offset(, 6)
            
9            If UCase$(.Value) = "S" Then .Offset(-1, 7) = .Offset(-1)
            
            If Row0 = 0 Then
                RowB = .Row + 1
            Else
                Set Rng = Range("A" & RowB & ":A" & (.Row - 1))
                GPE_com Rng, Row0:              Row0 = 0
            End If
        End If
        If .Value = 0 And .Offset(, 1) > GiaTri Then
            Row0 = .Row:            .Resize(1, 2).Copy Destination:=.Offset(, 6)
        End If
    End With
 Next jJ
End Sub
 
SA_DQ đã viết:
Bạn Hừu Thành sửa tự ên nha, dòng lệnh có đánh số đó. Bạn thêm vô bản gốc 2 dòng này;
Đáng lý chỉ thêm dòng 9 mà thôi; nhưng nhìn dữ liệu của bạn thấy quá nhiều, thêm dòng 4 vô, để màn hình khỏi 'lắc lư cái đầu, là lắc lư cái đầu. . ."
oh, hình như chưa ý với tác giả bác SA ơi,

Ý TÁC GIẢ LÀ THẾ NÀY:
HuuThanh đã viết:
(Trong bài em gửi em cũng mô tả nhầm là tương đối so với tim. Nhưng chính xác phải là chênh cao tương đối so với cọc trước nó. Cái này mong các anh hết sức thông cảm, nếu được nhờ các anh chỉnh lại cho em là tương đối so với cọc trước nó giúp em. Có nghĩa là kết quả cao độ tại vị trí bên trái (hay bên phải) đầu tiên lấy cao độ tuyệt đối của vị trí có giá trị 0 (cọc tim) cộng với chính nó, vị trí kế tiếp lấy chính nó cộng với giá trị tuyệt đối vừa tính được ở cọc ngay trước nó).

VD
S EG
-1.40 -0.05
-1.35 -0.02
0.00 578.36
1.19 0.01
1.58 -0.01
E
(bê trái)
+ Tại cọc cạnh cọc tim là: 578.36+(-0.02)=578.34
+ Tại cọc kế tiếp là: 578.34+(-0.05)=578.29
(bên phải)
+ Tại cọc đầu tiên: 578.36+0.01=578.37
+ Tại cọc thứ 2: 578.37+(-0.01)=578.36
vậy nhờ anh chỉnh lại trong công thức giúp em với!
 
Sửa lại 1 chút cho đúng ý tác giả

Đã thêm phần của Bác SA sửa tên
Sửa lại 1 chút cho đúng ý tác giả nhờ_BÁC SA kiểm tra hộ lại, tigertiger có ghi chú trong file - chỉ sửa hàm GPECOM

PHP:
Sub GPE_com(Clls As Range, VTri0 As Long)
 Dim mRow As Long, Zz As Long, RowM As Long
 Dim GTri0 As Double:               Dim Rng As Range, Rng9 As Range
 
 GTri0 = Range("B" & VTri0):        mRow = Clls.Cells(1, 1).Row
 RowM = mRow + Clls.Rows.Count - 1
 Set Rng9 = Range("A" & (VTri0 + 1) & ":A" & RowM)
 For Each Rng In Rng9
    With Rng
        .Offset(, 6) = .Value + .Offset(-1, 6)
        '.Offset(, 7) = GTri0 + .Offset(, 1)
        .Offset(, 7) = .Offset(-1, 7) + .Offset(, 1)
    End With
 Next Rng
 For Zz = (VTri0 - 1) To mRow Step -1
    With Cells(Zz, 1)
        .Offset(, 6) = .Value + .Offset(1, 6)
        '.Offset(, 7) = GTri0 + .Offset(, 1)  sua dong CODE nay thand code duoi
        .Offset(, 7) = .Offset(1, 7) + .Offset(, 1)
    End With
 Next Zz
End Sub
 

File đính kèm

  • ChuyenSoLieu_R.rar
    34.4 KB · Đọc: 18
Lại nhờ các anh chỉ giúp thêm em chút nữa !!!

Em cám ơn các anh !!!
- Số liệu em đã chuyển qua được, Xin các anh chỉ giúp thêm em mọt chút nữa.
- Nhưng giá trị ở cột B trên cùng dòng với cột có giá trị "0" ở cột A khi em cho giá trị nhỏ hơn 400 thì khi thực hiện nó không chuyển số liệu qua (giá trj này có thể nhận giá trị bất kỳ-nó là cao độ tự nhiên của một điểm). Vậy em phải chỉnh lại một chút ở chỗ nào vậy? Em đinh chỉnh lại một chút tại dòng "Const GiaTri As Double = 400" nhưng lai sợ nó ảnh hưởn tới chương trình nên chưa dám tự ý.
Xin cảm ơn các anh đã dành cho em thời gian và tình cảm thật nhiều !!!
 

File đính kèm

  • ChuyenSoLieu_R3.rar
    33 KB · Đọc: 11
Lần chỉnh sửa cuối:
Cũng xin mong các anh thông cảm nhiều nhiều, kiến thức của những thành viên mới như em thì ít, cho nên khi lên diễn đàn không giúp được nhiều cho các bạn khác, mà chỉ nhờ các anh ,các bạn khác giải thích, giúp đỡ. Biết như vậy là mình ích kỷ và kém cỏi lắm. Rất mong các anh không chê trách em. Em sẽ cố học tập để không phụ lòng các thành viên đã ưu ái giúp đỡ.
 
Xin các anh chỉ giúp thêm em mọt chút nữa.
- Nhưng giá trị ở cột B trên cùng dòng với cột có giá trị "0" ở cột A khi em cho giá trị nhỏ hơn 400 thì khi thực hiện nó không chuyển số liệu qua (giá trj này có thể nhận giá trị bất kỳ-nó là cao độ tự nhiên của một điểm). Vậy em phải chỉnh lại một chút ở chỗ nào vậy? Em đinh chỉnh lại một chút tại dòng "Const GiaTri As Double = 400" nhưng lai sợ nó ảnh hưởn tới chương trình nên chưa dám tự ý.
Mình đã nói ở #18 rồi mà!
Bạn phải cho biết các giá trị thực địa vế cao độ tự nhiên này; Nó ba động trong khoảng nào;
Nếu nó có thể nhỏ hơn độ lệnh tại cột 'B' khi cột 'A' tương ứng bằng 0 thì chúng ta phải tìm cách khác, thích hợp hơn.
Trước mắt, giá trị 400 đó có thể giảm, nhưng phải lớn mà ta vừa nói. :-=
 
Em xin lỗi mà không đọc chưa kỹ bài #18, cao độ đó là cao độ tự nhiên của một điểm nó nằm trong khoảng 50-4000(m). Em đã sửa lại cho giá trị trong máy là 1 em thấy nó cũng chạy ra. kết quả thấy vẫn đúng, không biết khi thay đổi như thế nó có anh hưởng gì đến chương trình hay không?
 
Em xin lỗi mà không đọc chưa kỹ bài #18, cao độ đó là cao độ tự nhiên của một điểm nó nằm trong khoảng 50-4000(m). Em đã sửa lại cho giá trị trong máy là 1 em thấy nó cũng chạy ra. kết quả thấy vẫn đúng, không biết khi thay đổi như thế nó có anh hưởng gì đến chương trình hay không?

bạn đọc kỹ bài của bác SA để biết lý do nhé

Chúc thành công

---
SA_DQ đã viết:
Cái anh chàng (Hổ)^2 này vẽ chuyện ra rồi đá banh cho người khác, Thật tệ ghê!

Vì chỉ có bác mới sửa code của mình nhanh nhất

Sorry bác - em đã chuộc lỗi rùi nhé bằng các bài post hum nay (nhân đây xin cảm ơn bác SA - hẹn tái ngộ bác một ngày gần)
 
Lần chỉnh sửa cuối:
Em xin lỗi mà không đọc chưa kỹ bài #18, cao độ đó là cao độ tự nhiên của một điểm nó nằm trong khoảng 50-4000(m). Em đã sửa lại cho giá trị trong máy là 1 em thấy nó cũng chạy ra. kết quả thấy vẫn đúng, không biết khi thay đổi như thế nó có anh hưởng gì đến chương trình hay không?
Nếu ta có khoảng cao độ từ 50:4.000(m) thì lúc đó ta gán Const này là 49;
GiaTri này được đưa ra để tránh việc chép những giá trị 0 khác tại cột 'A' , nhưng không phải biều thị vị trí cao độ, mà chỉ là độ lệnh gì đó mà thôi
Xem lại hình mình đã đưa lên, để cùng nhau nhau đề ra hướng giải quyết. Việc này chỉ có thể giải quyết triệt để, một khi biết quy luật giá trị tại 'B' (cùng dòng) với cột 'A', một khi chúng bằng 0.

Còn vấn đề chỉ chép đến cột 'G' thay vì cột 'H' thì sửa lại câu lệnh số 9 mới thêm vô;

9 If UCase$(.Value) = "S" Then .Offset(-1, 7) = .Offset(-1)

Thay số 7 thành số 6 & chạy lại xem sao (Tất nhiên xóa những giá trị cũ tại cột 'H' đi)
 
Còn vấn đề chỉ chép đến cột 'G' thay vì cột 'H' thì sửa lại câu lệnh số 9 mới thêm vô;

9 If UCase$(.Value) = "S" Then .Offset(-1, 7) = .Offset(-1)

Thay số 7 thành số 6 & chạy lại xem sao (Tất nhiên xóa những giá trị cũ tại cột 'H' đi)

Oh, vấn đề tigertiger đã sửa rùi bác SA ah,


Nếu ta có khoảng cao độ từ 50:4.000(m) thì lúc đó ta gán Const này là 49;
GiaTri này được đưa ra để tránh việc chép những giá trị 0 khác tại cột 'A' , nhưng không phải biều thị vị trí cao độ, mà chỉ là độ lệnh gì đó mà thôi
Xem lại hình mình đã đưa lên, để cùng nhau nhau đề ra hướng giải quyết. Việc này chỉ có thể giải quyết triệt để, một khi biết quy luật giá trị tại 'B' (cùng dòng) với cột 'A', một khi chúng bằng 0.

Vì cột A thể hiện khoảng cách -> tại 1 mặt cắt chỉ có thể có 1 số 0 thui bác ah -- HY VỌNG cái này HuuThanh xác nhận rõ

Tuy nhiên nhìn lại MC ở khoảng dòng 93 thì đúng là nhiều số không thiệt -> đây có thể là rãnh nước thẳng đứng chăng??? (nếu đúng thế thì không sử dụng được file ở post #29 đâu nhé - vì thế sẽ sai)
Thế thì nên có thể đặt giá trị này =8 hoặc =10 sao cho cao hơn chiều chênh theo MIA (thước đo bên trắc đạc địa hình)
==> TUY nhiên khi đó mà đo ở đồng bằng (vd ĐB Sông Cửu Long) cao độ đôi khi còn -1, -2 hoặc chỉ vào khoảng 1.0 --4.0
VẬY có thể nên để người sd nhập có khi hay hơn
NHƯNG vẫn có thể còn vấn đề vì là so sánh lớn hơn ( > ) => có thể ng dùng cũng k quyết được khi mà các mức chênh lại có giá trị lớn hơn cả cao độ,
.
 
Lần chỉnh sửa cuối:
Vâng !!! Anh tigertiger ! nói đúng ạ, tại cột A trên cung một mặt cắt có thể có hơn 2 vị trí có giá trị 0 vì tất cả các điểm đó là cự ly tương đối mà cứ thay đổi cao độ là ta có cự ly tương đối. ví dụ khi đo một mặt cắt có vị trí rãnh hay mương ta thường có cặp những giá sau:
1 2
0 -0.2 (tại đúng điểm mép địa hình thấp xuống 0.2m)
0.4 0 (0.4m bằng phẳng)
0 0.2 (lên cao 0.2m)
....
như vậy cùng với giá trị 0 ở tim thì việc trên một mặt cắt có tới 3 giá trị 0 là bình thường.

* Sau khi đọc kỹ lại các bài em thấy ý tưởng của anh DA_DQ thật tuyệt vời vì anh cho test luôn giá trị ở cột B vì giá trị ở cột B là chên cao thường không lớn lắm. Do vậy việc gán một giá trị hằng số để so sánh trong bài là ý tưởng thậy hay (thực tình em cũng không thể nghĩ ra).

* Đến giờ thì em thấy đoạn code các anh, các bạn giúp đỡ đã thực hiện một các rất tốt. Có lẽ anh tigertiger cũng làm ngành công trình thì phải?

Em xin chân thành cảm ơn các anh, các bạn !!!
 
Tuy nhiên nhìn lại MC ở khoảng dòng 93 thì đúng là nhiều số không thiệt -> đây có thể là rãnh nước thẳng đứng chăng??? (nếu đúng thế thì không sử dụng được file ở post #29 đâu nhé - vì thế sẽ sai)
Điều này mình đã cảnh báo với AnhTuan1066 sau 5 h chiều qua rồi mà!
Thế thì nên có thể đặt giá trị này =8 hoặc =10 sao cho cao hơn chiều chênh theo MIA (thước đo bên trắc đạc địa hình)
==> TUY nhiên khi đó mà đo ở đồng bằng (vd ĐB Sông Cửu Long) cao độ đôi khi còn -1, -2 hoặc chỉ vào khoảng 1.0 --4.0 ; VẬY có thể nên để người sd nhập có khi hay hơn
NHƯNG vẫn có thể còn vấn đề vì là so sánh lớn hơn ( > ) => có thể ng dùng cũng k quyết được khi mà các mức chênh lại có giá trị lớn hơn cả cao độ.
Lúc đó, chắc khi nhập phải dùng màu sắc, hay cái gì đó để phân biệt mà thôi! - Giữa các số 0 trong chuỗi kích thước đo đạt được;
Vậy Hữu Thành cho biết xem nên sao chổ này?!!
 
Không sao! trong trường hợp cao độ tuyệt đối của khu vực khảo sát, đo đạc qua nhỏ, ta thường giả định cao độ của khu vực đó được nâng lên 100->200m. Như vậy địa hình sẽ được nâng lên, thực hiện như vậy trong ngành gt vẫn thực hiện ( như khi ta đo một khu vực nào đó không có các điểm mốc quốc gia, ta vẫn tiến hành giả định) trường hợp không cho phép giả định thì bắt buộc khi tiến hành xây dựng dữ liệu về điểm tim ta phải bổ sung thêm một mã gì đó cho phép chương trình nhận ra.
- Thực tình khi gủi bài nhờ các anh giúp em cũng không lường trước được các trường hợp như vậy, vì em công tác tại các tỉnh Tây Bắc cao độ tuyệt đối ở đây thường cao hơn 100m. Thứ 2 là trong quá trình các anh hướng dẫn kiến thức về VBA của em còn ít lên không được linh hoạt cho lắm. Nhũng vấn đề mà các anh đề cập thực tình em cũng không thể lường trước được ( ví dụ như trường hợp có nhiều hơn 1 số 0 trong một mặt cắt) nhưng các anh đã rất có kinh nghiệm và tính trước luôn cho em (thực sự bái phục) Chỉ sau khi kiểm tra lại em mới thấy rằng trong số liệu của mình có nhiều hơn 2 số 0.
Em hiện nay đang công tác trong lĩnh vực giao thông, không biết các anh có cùng nghành không vậy? Được gặp gỡ và được các anh giúp đỡ thực sự là một may mắn của em. Hi vọng rằng anh em mình sẽ được gặp nhau nhiều trên diễn đàn. Được gặp trực tiếp các anh e là khó vì em thì ở ngoài bắc xa qua !!!
Chương trình các anh hướng dẫn chậy rất tốt và trên cả mức mong đợi của em rồi. Thực ra ban đầu em cũng không thể nghĩ được nó lại giải quyết một cách gọ gàng như vậy đâu.
Chân thành cảm ơn các anh, các bạn đã nhiệt tình giúp đỡ !!!
 
Trích:
Tuy nhiên nhìn lại MC ở khoảng dòng 93 thì đúng là nhiều số không thiệt -> đây có thể là rãnh nước thẳng đứng chăng??? (nếu đúng thế thì không sử dụng được file ở post #29 đâu nhé - vì thế sẽ sai)
Điều này mình đã cảnh báo với AnhTuan1066 sau 5 h chiều qua rồi mà!

Lỗi tại TigerTiger cứ chủ quan nghĩ là bác SA phòng xa - vì thường số liệu địa hình ít xảy ra trường hợp này (m/c tự nhiên đâu mấy khi thẳng đứng - ở đây chắc là tài liệu hoàn công đây - đường đã thi công xong?) - cám ơn bác SA...


Lúc đó, chắc khi nhập phải dùng màu sắc, hay cái gì đó để phân biệt mà thôi! - Giữa các số 0 trong chuỗi kích thước đo đạt được;
Vậy Hữu Thành cho biết xem nên sao chổ này?!!
Đúng vậy bác SA_DQ ah,

Nhưng phân biệt màu sắc chi cho mệt, nếu xét thì nên: có chỉ trường hợp nào có nhiều hơn 1 số không (0) thì số 0 nào ứng với TIM - thì tương ứng với nó Ô ở cột C có giá trị là 1 chẳng hạn (NHƯNG hơi bất tiện là tác giả phải nhập vào và rà soát các m/c)

Ah, HuuThanh xem tại sao trong chương trình trắc đạc (họ xuất ra cho bạn) chắc hẳn phải phân biệt TIM chứ -> có thể còn số liệu nào khác k nhỉ, ví như 1 số quy ước chỉ ra vị trí tim (như số khoảng cách tính từ lề trái đến TIM chẳng hạn - 1 số phần mềm cũng căn vào điều này)?????

Túm lại:

có thể giải pháp thế này - giá trị đó (giá trị 400 xét đó) cần thay đổi thì xin hỏi: HuuThanh muốn là:
+ vào code sửa
+ hay là nhập vào từ một ô (gần nút copy to đó chẳng hạn)
+ hay là CT xuất hiện hộp thoại hỏi mỗi lần bấm vào copy to
???????????

HuuThanh Suy nghĩ và trả lời nhanh nhé....
 
Lần chỉnh sửa cuối:
CODE mà các anh cung cấp là ổn rồi. Thường cao đọ tuyệt đối khu vực em thực hiện không nhỏ hơn 100 do vậy em đã thay số 400 trong khai báo hằng bằng 50 là chương trình chạy tốt và chính xác. Không cần phải chỉnh lại gì cả. Nếu các anh có cái emai cho em thì tốt quá, có gì em liên lạc cùng các anh !!!
Cho em xin hỏi anh viết chữ trên nền hồng có khung làm thế nào đó? cả việc lồng anh vào đó nữa?
Em thấy các anh trình bày đẹp và dễ coi quá !!!
 
Không sao! trong trường hợp cao độ tuyệt đối của khu vực khảo sát, đo đạc qua nhỏ, ta thường giả định cao độ của khu vực đó được nâng lên 100->200m. Như vậy địa hình sẽ được nâng lên, thực hiện như vậy trong ngành gt vẫn thực hiện ( như khi ta đo một khu vực nào đó không có các điểm mốc quốc gia, ta vẫn tiến hành giả định) trường hợp không cho phép giả định thì bắt buộc khi tiến hành xây dựng dữ liệu về điểm tim ta phải bổ sung thêm một mã gì đó cho phép chương trình nhận ra.
- Thực tình khi gủi bài nhờ các anh giúp em cũng không lường trước được các trường hợp như vậy, vì em công tác tại các tỉnh Tây Bắc cao độ tuyệt đối ở đây thường cao hơn 100m. Thứ 2 là trong quá trình các anh hướng dẫn kiến thức về VBA của em còn ít lên không được linh hoạt cho lắm. Nhũng vấn đề mà các anh đề cập thực tình em cũng không thể lường trước được ( ví dụ như trường hợp có nhiều hơn 1 số 0 trong một mặt cắt) nhưng các anh đã rất có kinh nghiệm và tính trước luôn cho em (thực sự bái phục) Chỉ sau khi kiểm tra lại em mới thấy rằng trong số liệu của mình có nhiều hơn 2 số 0.

Thế thì yên tâm rùi, bạn down file cuối này (kèm trong bài này) - tigertiger đã bổ sung những thay đổi cũng như chỉnh lại giá trị là 40 thôi
PHP:
Const GiaTri As Double = 40
BẠN cập nhập lại nhé - biết chỗ sửa, biết phạm vi ứng dụng của CT là OK (VBA mã mở mà - yên tâm k phải hộp đen)

Chúc thành công

------------------
Cho em xin hỏi anh viết chữ trên nền hồng có khung làm thế nào đó? cả việc lồng anh vào đó nữa?
Em thấy các anh trình bày đẹp và dễ coi quá !!!
Cảm ơn

Muốn trích dẫn lại bài nào bạn bấm vào nút trích dẫn ở cuối bài đó, Muốn hiểu nữa thế thì bạn xem link sau để tìm hiểu thêm cách post bài (trong đó có nói về hình ảnh): http://www.giaiphapexcel.com/forum/showthread.php?t=250
.
 

File đính kèm

  • ChuyenSoLieu_R2.rar
    24.2 KB · Đọc: 36
Lần chỉnh sửa cuối:
Nhờ các anh MOD xóa giúp em bài này !!!
 
Lần chỉnh sửa cuối:
Nhờ các anh MOD xóa giúp em bài này !!!
 
Lần chỉnh sửa cuối:
Cảm ơn các anh nhều !!!. Thực tình em rất vui, và hạnh phúc.

Oh, bạn đừng viết thế này -> vì như thế là SPAM bài đó - các MOD sẽ xóa những bài này (xóa cũng vất lém) - cả bài này của tui cũng sẽ xóa

Muốn cám ơn ai, bạn bấm vào nút cảm ơn là đủ, Nếu cần nữa thì bạn có thể nhắn tin (pm) cám ơn cho người đó

thế nhé rút Kinh nghiệm

NHỜ MODs, SMODs, AMINs XÓA HỘ BÀI NÀY NHÉ, Thanks


 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom