Page 1 of 1

ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Mon Dec 12, 2016 12:10 am
by sharp
สวัสดีครับอยากให้รบกวนช่วยดู VBA หน่อยครับว่าผมจะใช้คำสั่งไหนแทน Range("C8").Select ครับ
โดยผมเขียนว่าถ้าเกิดแถวบนของactivecellมีค่าเป็น เนื้อหรือไก่ให้ขึ้นในrangeที่กำหนดแต่ผมจะเขียนยังไงครับให้มันไปขึ้นในคอลัมน์ใหม่เองโดยที่ไม่ต้องกำหนดRangeครับ ขอบคุณครับ

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Mon Dec 12, 2016 5:09 pm
by DhitiBank
ลองปรับโค้ดเป็นแบบนี้ครับ

Code: Select all

Private sName As String
Private r As Range

Private Sub CommandButton1_Click()
    sName = "เนื้อ"
    Call InsertSName
End Sub

Private Sub CommandButton2_Click()
    sName = "หมู"
    Call InsertSName
End Sub

Private Sub CommandButton3_Click()
    sName = "ไก่"
    Call InsertSName
End Sub

Public Sub InsertSName()
    On Error Resume Next
    Set r = Range("b8:h19").SpecialCells(xlCellTypeBlanks).Range("a1")
    If Err.Number = 1004 Then
        MsgBox "ไม่พบพื้นที่ว่าง"
        Exit Sub
    ElseIf r.Address(0, 0) <> "B8" And r.Offset(20, -1).End(xlUp).Row <> 19 Then
        Set r = r.Offset(20, -1).End(xlUp).Offset(1, 0)
    End If
    r.Value = sName
    If r.Row = 19 Then
        If r.Column <> 8 Then _
            r.End(xlUp).Offset(0, 1).Select
    Else
        r.Offset(1, 0).Select
    End If
End Sub

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Mon Dec 12, 2016 11:30 pm
by sharp
ขอบคุณมากครับที่เสียสละเวลาตอบคำถามแต่ยังไม่ได้ผลลัพธ์ที่ต้องการครับหากแต่อยากให้มันขึ้นคอลัมน์ใหม่เองเมื่อเป็นข้อมูลใหม่ครับตามประมาณนี้ในรูปภาพครับ

Image

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Wed Dec 14, 2016 12:34 am
by DhitiBank
ลองปรับโค้ดโปรซีเยอร์ InsertSName เป็นแบบนี้ครับ

Code: Select all

Public Sub InsertSName()
    Dim i As Integer, j As Integer, k As Byte
    Set r = ActiveSheet.Range("i8").End(xlToLeft)
    If r.Value = sName Then
        For i = 1 To 2
            If k = 1 Or r.Offset(, i - 1).Column = 9 Then Exit For
            For j = 1 To 12
                If r.Offset(j - 1, i - 1).Value = "" Then
                    r.Offset(j - 1, i - 1).Value = sName
                    k = k + 1
                    Exit For
                End If
            Next j
        Next i
    Else
        If r.Offset(, 1).Column = 9 Then Exit Sub
        r.Offset(, 1).Value = sName
    End If
End Sub

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Wed Dec 14, 2016 8:24 am
by ZEROV
สำนวนไทย "เส้นผมบังภูเขา"คงใช้ได้ดีกับกรณีนี้

@ Module1

Code: Select all

Global refCell As Range
Global xStr As String
Global rOffset As Single
@Sheet1 Module

Code: Select all

Private Sub CommandButton1_Click()
xStr = CommandButton1.Caption
GetStr
End Sub
Private Sub CommandButton2_Click()
xStr = CommandButton2.Caption
GetStr
End Sub
Private Sub CommandButton3_Click()
xStr = CommandButton3.Caption
GetStr
End Sub
Private Sub CommandButton4_Click()
Set refCell = [d8]
xStr = ""
rOffset = 0
refCell.CurrentRegion.ClearContents
End Sub
Private Sub GetStr()
If xStr <> refCell.Value Then
    rOffset = 0
    Set refCell = refCell.Offset(0, 1)
End If
refCell.Offset(rOffset, 0).Value = xStr
rOffset = rOffset + 1
End Sub


Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Wed Dec 14, 2016 12:39 pm
by sharp
ขอบคุณคุณ DhitiBank มากๆเลยครับได้ผลลัพธ์ตามต้องการเลยครับเหลือไปปรับแต่งเอาเองให้เหมาะสมกับการใช้งานต่อไปซึ่งจะเรียนรู้และปรับแก้เองให้ได้แล้วครับ _/\_ กราบขอบคุณมากครับ
และขอบคุณคุณ ZEROV ด้วยคนมากๆครับแต่ทำไมพอรันทีแรกได้ผลลัพธ์ตามต้องการพอปิดแล้วมาลองใหม่ดัน Error ตรงนี้ครับ If xStr <> refCell.Value Then ตรงส่วนของ Private Sub GetStr()

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Wed Dec 14, 2016 3:34 pm
by ZEROV
sharp wrote:ขอบคุณคุณ DhitiBank มากๆเลยครับได้ผลลัพธ์ตามต้องการเลยครับเหลือไปปรับแต่งเอาเองให้เหมาะสมกับการใช้งานต่อไปซึ่งจะเรียนรู้และปรับแก้เองให้ได้แล้วครับ _/\_ กราบขอบคุณมากครับ
และขอบคุณคุณ ZEROV ด้วยคนมากๆครับแต่ทำไมพอรันทีแรกได้ผลลัพธ์ตามต้องการพอปิดแล้วมาลองใหม่ดัน Error ตรงนี้ครับ If xStr <> refCell.Value Then ตรงส่วนของ Private Sub GetStr()
กดปุ่ม "ล้างข้อมูล" ก่อน เพื่อรีเซ็ทค่าตัวแปรต่างๆ

Re: ทำอย่างไรให้ค่าไปในคอลัมน์ใหม่เมื่อเจอเงื่อนไขจากการใช้ IF

Posted: Fri Dec 16, 2016 1:56 am
by sharp
ZEROV wrote:
sharp wrote:ขอบคุณคุณ DhitiBank มากๆเลยครับได้ผลลัพธ์ตามต้องการเลยครับเหลือไปปรับแต่งเอาเองให้เหมาะสมกับการใช้งานต่อไปซึ่งจะเรียนรู้และปรับแก้เองให้ได้แล้วครับ _/\_ กราบขอบคุณมากครับ
และขอบคุณคุณ ZEROV ด้วยคนมากๆครับแต่ทำไมพอรันทีแรกได้ผลลัพธ์ตามต้องการพอปิดแล้วมาลองใหม่ดัน Error ตรงนี้ครับ If xStr <> refCell.Value Then ตรงส่วนของ Private Sub GetStr()
กดปุ่ม "ล้างข้อมูล" ก่อน เพื่อรีเซ็ทค่าตัวแปรต่างๆ
ขอบคุณมากๆครับ _/\_