:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ถาม Code VBA กำหนด Range ข้าม Sheet

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

ถาม Code VBA กำหนด Range ข้าม Sheet

#1

Post by chom_poona »

สวัสดีค่ะ

รบกวนสอบถามคำสั่ง VBA หน่อยค่ะว่า ถ้าเราสร้างข้อมูล (Range) ไว้ที่ Sheet หนึ่ง แล้ว ต้องการให้ ผลลัพธ์มาแสดงอีก Sheet หนึ่ง
ใช้คำสั่งอะไรค่ะ

ขอ คำสั่งการกำหนด Range ข้าม Sheet ด้วยค่ะ

ตัวอย่าง ที่ส่งมาให้ ดู เป็น Whit ActiveSheet ซึ่ง ข้อมูลอยู่ใน Sheet เดียวกัน
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#2

Post by chom_poona »

แนบไฟล์ไม่ได้ค่ะ
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#3

Post by logic »

ตัดไฟล์ให้เล็กลงก่อนครับ ขนาดไม่เกิน 300kb ครับ :)
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#4

Post by chom_poona »

Sub Button1_Click()
Dim rall As Range, icount As Long
Dim r1 As Range, r2 As Range
Dim c As New Collection, item As Variant
With ActiveSheet
Set rall = Union(.[b3:e5], .[b19:e24]) 'select Range
.Range("j6:j1000,o6:o1000").ClearContents 'Clear Range
For Each r1 In rall 'loop Range rall1
icount = 0
For Each r2 In rall 'loop range rall2

อยากกำหนด Range ไว้อีก Sheet ตรง Set rall ต้องกำหนดยังไงค่ะ
ไฟล์ แค่ 16 kb แนบไฟล์แล้วให้ใส่ password
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#5

Post by logic »

เรื่อง vba ทำตามกฎข้อ 5 ด้วยครับ :aru:
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#6

Post by chom_poona »

Code: Select all

Sub check()
Dim rall As Range, icount As Long
Dim r1 As Range, r2 As Range
Dim c As New Collection, item As Variant
With ActiveSheet
    Set rall = Union(.[b5:f21], .[j5:n21], .[r5:v21], .[z5:ad21], .[ah5:al21]) 'select Range
    .Range("b6:b1000,p6:p1000").ClearContents 'Clear Range
    For Each r1 In rall  'loop Range rall1
        icount = 0
        For Each r2 In rall 'loop range rall2
            If r1.Value = r2.Value Then
                icount = icount + 1
            End If
        Next r2
        On Error Resume Next 'if error run on
        If icount > 1 Then
            c.Add CStr(r1.Value), CStr(r1.Value) ' add value collection(item)
        End If
        On Error GoTo 0
    Next r1
    For Each item In c
        If CLng(item) <= .[b2] Then
            .Range("j" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        Else
            .Range("o" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        End If
    Next item
End With
'sort roll k
ActiveWorkbook.Worksheets("test").sort.SortFields.Clear
ActiveWorkbook.Worksheets("test").sort.SortFields.Add Key:=Range("c6:c100"), _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("test").sort
    .SetRange Range("b6:n100")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#7

Post by chom_poona »

รบกวนแก้ไข code ให้ ด้วยค่ะ
ในกรณีที่ Range อยู่ กันคนละ Sheet ค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#8

Post by snasui »

:D Code ที่จะให้แก้ต้องเขียนมาเอง ไม่ใช่เป็น Code เดิมที่ยังไม่มีการแก้ไขใด ๆ

ลองแนบไฟล์พร้อม Code ที่ลองแก้เองแล้วมาใหม่ กรณีหลุดออกจากระบบให้ Login เข้ามาใหม่แล้วค่อยแนบไฟล์ครับ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#9

Post by chom_poona »

เรื่องการ กำหนด Range ข้าม Sheet สามารถทำได้แล้วค่ะ

แต่ว่า ข้อมูลที่ต้องการให้มาแสดงยังไม่ถูกต้อง ไม่รู้ว่า ใช้คำสั่งผิดตรงไหนค่ะ

รบกวนผู้รู้ช่วยตอบหน่อยค่ะ ตามตัวอย่างไฟล์ที่แนบมาให้ค่ะ

แก้ไข** พบว่า vba ไม่แสดงค่า ตัวเลขที่เป็นทศนิยม 2 ตำแหน่งค่ะ
Attachments
count_data (01).xlsm
(63.26 KiB) Downloaded 14 times
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#10

Post by chom_poona »

Code: Select all

Sub check()
Dim rall As Range, icount As Long
Dim r1 As Range, r2 As Range
Dim c As New Collection, item As Variant
With Sheets("cal")
    Set rall = Union(.[b5:f21], .[b31:h49], .[x31:ac49], .[j5:n21], .[r5:v21], .[z5:ad21], .[m31:s49], .[ag31:al49], .[ah5:al21], .[ap5:at21], .[ao29:at36]) 'select Range

    With Sheets("Result")
    .Range("c6:c1000,q6:q1000").ClearContents
    For Each r1 In rall
        icount = 0
        For Each r2 In rall
            If r1.Value = r2.Value Then
                icount = icount + 1
            End If
        Next r2
        On Error Resume Next
        If icount > 1 Then
            [b]c.Add CDbl(r1.Value), CDbl(r1.Value)[/b]
        End If
        On Error GoTo 0
    Next r1
    For Each item In c
        If CLng(item) <= .[c3] Then
            .Range("c" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        Else
            .Range("q" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        End If
    Next item
End With
End With
End Sub
ติดปัญหาที่ code ตรง Cdbl กำหนดให้รับค่าเป็นแบบ double แต่พอมาแสดงผลมันไม่แสดงค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#11

Post by snasui »

:D Cdbl ใส่ไว้ผิดที่ แก้ไขให้กลับไปเหมือนเดิมครับ

ตัวอย่างการปรับ Code ดูด้านล่างครับ

Code: Select all

For Each item In c
    If CDbl(item) <= .[c3] Then
        .Range("c" & .Rows.Count).End(xlUp) _
            .Offset(1, 0).Value = CDbl(item)
    Else
        .Range("q" & .Rows.Count).End(xlUp) _
            .Offset(1, 0).Value = CDbl(item)
    End If
Next item
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#12

Post by chom_poona »

** ลองแก้ แล้ว จุดทศนิยม ออกแล้วค่ะ ขอบคุณค่ะ ขอเช็ค ความถูกต้องของข้อมูลก่อนค่ะ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#13

Post by chom_poona »

อยากจะขอรบกวน อีกครั้งหนึ่งค่ะ

ค่าที่ได้ ออกมา มีค่า 0 ออกมาด้วยค่ะ ไม่ต้องการให้ค่า 0 ออกมาทำอย่างไรได้บ้างค่ะ
Attachments
count_data (01).xlsm
(56.14 KiB) Downloaded 15 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ถาม Code VBA กำหนด Range ข้าม Sheet

#14

Post by snasui »

:D ปรับมาเองก่อน ติดแล้วค่อยถามกันครับ
Post Reply