: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

Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
BooBee
Member
Member
Posts: 7
Joined: Fri Jul 13, 2018 8:54 am

Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#1

Post by BooBee »

สวัสดีค่ะ พอดี มีโค้ดแล้วให้วนรอบ โดยมีเงื่อนไขว่า
ถ้า คีย์ data column G data จะแสดง ใน column J แต่ติดปัญหาตรง ค่าของ row อื่นๆ แสดง ตามด้วย

ถึง column G ไม่ได้ใส่ค่า แต่ ข้อมูลจะแสดง เพราะใส่การวนค่า I

Code vba ค่ะ
If target.address = range (“$G$” & i ).adderss then
If Ucase (Target.value) = Ucase(Range(“J” & i).value) then
Range (“$G$” & i).value = lot
Elseif range(“$G$” & i + 1) = “” then
Range (“$J$” & i +1).value = “”
Endif
Endif

แต่อยากได้ โค้ดที่ซ่อนผลลัพธ์ ที่เรากำหนดค่ะ
เช่น column J มีข้อความ 31-May-00
ซึ่งไม่อยากให้เห็นข้อความนี้ อยู่ใน column รบกวนแนะนำด้วยค่ะ
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#2

Post by puriwutpokin »

แนบไฟล์ตัวอย่างและแนบโค้ดให้เป็น โค้ดด้วยครับ
:shock: :roll: :D
BooBee
Member
Member
Posts: 7
Joined: Fri Jul 13, 2018 8:54 am

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#3

Post by BooBee »

Code: Select all

Sub Worksheet_Change(ByVal Target As Range)
 
Dim i As Integer
i = 1
For i = 9 To 39

 
If Target.Address = Range("$G$" & i).Address Then

Dim lot As String
 
lot = Range("$G$" & i + 1).Value
 
'If Len(lot) <= 0 Then
'Exit Sub
'End If
         
'Dim a As String
Dim x As String
'a = getLotabc(x)
x = Range("$G$" & i).Value
 
Call ShowMFGDate(lot)
'>>>Bee
Call ExpDate(lot)
'<<<Bee
 
End If
 
If Target.Address = Range("$G$" & i).Address Then
 
      If UCase(Target.Value) = UCase(Range("I" & i).Value) Then
      
              Range("$G$" & i).Value = lot
             
            '>>>test
 
ElseIf Range("$G$" & i + 1) = "" Then
 
        Range("$I$" & i + 1).Value = ""
       
      
                     
            '<<<test
         
          End If
     End If
 
    '-------------Exp-------------'
     
        If Target.Address = Range("$G$" & i).Address Then
      
            If UCase(Target.Value) = UCase(Range("J" & i).Value) Then
      
              Range("$G$" & i).Value = lot
             
            '>>>test
       ElseIf Range("$G$" & i + 1) = "" Then
      
                  
              Range("$J$" & i + 1).Value = ""
             
            '<<<test
            
      End If
    End If
    '--------------Exp------------'
 
         Next i
        
    
         
         
End Sub
 
Function ConvertDate(lot As String) As Date
    Dim nyear As Integer
    Dim nmonth As String
    Dim nday As Integer
   
   Dim sTmp As String
  
    sTmp = Mid(CStr(VBA.Year(Now())), 1, 3)
   
    'nyear = CInt(sTmp & Mid(lot, 1, 1))
    nyear = CInt("0" & sTmp & Mid(lot, 1, 1))
   
    sTmp = Mid(UCase(lot), 2, 1)
    Select Case sTmp
        Case "X"
            nmonth = 10
        Case "Y"
            nmonth = 11
        Case "Z"
            nmonth = 12
          
        Case Else
           
            nmonth = CInt("0" & sTmp)
            
    End Select
   
    nday = CInt("0" & Mid(lot, 3, 2))
   
    Dim dt As Date
   
    dt = DateSerial(nyear, nmonth, nday)
   
    ConvertDate = dt
   
End Function
 
Sub ShowMFGDate(lot As String)
 
    Dim showlot As String
   
    Dim i As Integer
    i = 1
    For i = 9 To 39
   
   showlot = Range("G" & i).Value
   If UCase(showlot) = "No" Then
    Range("G" & i).Value = showlot
   
    Exit Sub
   End If
  
   Dim dt As Date
   dt = ConvertDate(showlot)
  
   
   'Range("I" & i).Value = dt
  
 
    'dt = Range("I" & i)
  
   lot = Range("I" & i)
  
        Range("I" & i).Value = Format(dt, "dd-MMM-YY")
       
        
     Next i
     
End Sub
 
Function getLotabc(x As String)
 
   Dim a As String
   
   Dim i As Integer
    i = 1
    For i = 9 To 39
   
   a = Range("$G$" & i).Value
   getLotabc = a
   
    Next i
   
End Function
 
 
'--------------------Exp-----------------------
 
Function ConvertDateExp(lot As String) As Date
 
    Dim nyear As Integer
    Dim nmonth As Integer
    Dim nday As Integer
   
    Dim sTmp As String

    sTmp = Mid(CStr(VBA.Year(Now())), 1, 3)
  
    nyear = CInt("0" & sTmp & Mid(lot, 1, 1))
   
    sTmp = Mid(UCase(lot), 2, 1)
    Select Case sTmp
        Case "X"
            nmonth = 10
        Case "Y"
            nmonth = 11
           
        Case "Z"
            nmonth = 12
          
        Case Else
            nmonth = CInt("0" & sTmp)
           
     End Select
       
    Dim DDy As String
   
     DDy = Mid(CStr(VBA.Year(Now())), 3, 2)
  
    'nmonth = CInt("0" & sTmp & Mid(lot, 1, 1))
   
      
    '===================Date===================
 
'nday = Mid("0" & lot, 3, 2)
nday = CInt("0" & Mid(lot, 3, 2))
 
If nday = "00" Then
   nday = "00"
   DDy = "00"
ElseIf nday <> "01" Then
       If CInt(nday) > 1 And CInt(nday) < 11 Then
          DDy = "0" & CStr(CInt(nday) - 1)
       Else
           DDy = CStr(CInt(nday) - 1)
       End If
ElseIf nday = "01" Then
'===================Month===================
       If nmonth <> "01" Then
          If CInt(nmonth) > 1 And CInt(nmonth) < 11 Then
             nmonth = "0" & CStr(CInt(nmonth) - 1)
          Else
             nmonth = CStr(CInt(nmonth) - 1)
          End If
       ElseIf nmonth = "01" Then
              nmonth = "12"
              ye = CStr(CInt(nyear) - 1)
       End If
'===================Date===================
       Select Case CInt(nmonth)
       Case 1, 3, 5, 7, 8, 10, 12
            DDy = "31"
       Case 4, 6, 9, 11
            DDy = "30"
       Case 2
            If CInt(nyear) Mod 4 = 0 Then
               DDy = "29"
            ElseIf CInt(nyear) Mod 4 <> 0 Then
                   DDy = "28"
            End If
       End Select
End If
'===================Date===================
If CInt(nmonth) = 2 And CInt(DDy) > 28 Then
    If CInt(nyear) Mod 4 = 0 Then
       DDy = "29"
    ElseIf CInt(nyear) Mod 4 <> 0 Then
           DDy = "28"
    End If
End If
 
   nday = CInt("0" & Mid(lot, 3, 2))
  
  If nmonth = 8 And DDy > 28 Then
    If CInt(nyear) Mod 4 = 0 Then
       DDy = "29"
    ElseIf CInt(nyear) Mod 4 <> 0 Then
           DDy = "28"
    End If
End If
 
   Dim dt As Date
   
    dt = DateSerial(nyear + 1, nmonth - 6, DDy)
   
    ConvertDateExp = dt
   
End Function
 
Sub ExpDate(lot As String)
 
Dim i As Integer
    i = 1
    For i = 9 To 39
   
    Dim showlot As String
   showlot = Range("$G$" & i).Value
   If UCase(showlot) = "NO" Then
    Range("$G$" & i).Value = showlot
   
    Exit Sub
   End If
  
   Dim dt As Date
   dt = ConvertDateExp(showlot)
 
  
   lot = Range("$J$" & i)
 
        Range("$J$" & i).Value = Format(dt, "dd-MMM-YY")
       
        Next i
                        
End Sub
 
Function getLotabc1(x As String)
 
   Dim a As String
   
   Dim i As Integer
    i = 1
    For i = 9 To 39
   
   a = Range("$G$" & i).Value
   getLotabc = a
   
    Next i
   
End Function
 

You do not have the required permissions to view the files attached to this post.
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: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#4

Post by snasui »

😀 ไฟล์ที่จะแนบ Code ได้ต้องมีนามสกุลเป็น .xlsm เช่นนี้เป็นต้น ลองแนบมาใหม่ครับ
BooBee
Member
Member
Posts: 7
Joined: Fri Jul 13, 2018 8:54 am

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#5

Post by BooBee »

โปรแกรมจะคำนวน ด้วย column G ค่ะ แล้วจะไปแสดงผลที่ column I และ J ค่ะ แต่ อยากให้มันคำนวน โดยแถวต่อแถวค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#6

Post by logic »

อ่านคำถามแล้วไม่เข้าใจ สรุปว่าเริ่มจากการทำอะไรบ้างและต้องการทำอะไรครับ ทำไมต้องลูปไม่ดูกันเป็นเซลล์ต่อเซลล์ครับ
BooBee
Member
Member
Posts: 7
Joined: Fri Jul 13, 2018 8:54 am

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#7

Post by BooBee »

Column G ใส่ตัวเลข 910911
โปรแกรม จะคำนวนให้column I และ J
โดย เอาจาก column G มาคำนวน

แต่ที่ต้องการให้ วนลูป คือค่าที่ใส่มา ใน column G rows ที่ 9 โปรแกรม ก็จะคำนวนใน column I และ J แต่ค่าที่ได้แนบไฟล์ไปนั้น โปรแกรม มันคำนวนต่อๆกันมา โดยที่ ใน column G ยังเป็นค่าว่างอยู่
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: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#8

Post by snasui »

BooBee wrote: Wed Jan 09, 2019 1:12 pm Column G ใส่ตัวเลข 910911
โปรแกรม จะคำนวนให้column I และ J
โดย เอาจาก column G มาคำนวน
:D ผมอ่านแล้วก็ไม่เข้าใจเช่นกัน ค่อย ๆ ถามตอบกันไปครับ

สมมุติ G9 คือ 910911 ค่าที่ถูกต้องในคอลัมน์ I และ J คือค่าเท่าไร คิดอย่างไรจึงได้ค่าเท่านั้นครับ :?:
BooBee
Member
Member
Posts: 7
Joined: Fri Jul 13, 2018 8:54 am

Re: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#9

Post by BooBee »

9 คือ ปีปัจจุบันค่ะ = 19
1 คือ เดือนปัจจุบัน = 01
09 คือ วันที่ค่ะ

แต่โปรแกรมมันคำนวนณถูกต้องแล้วค่ะ
แต่ติดตรงที่ว่า ถ้า แถวไหน ของ column G เป็นช่องว่าง ให้โปรแกรม column I และ column J แสดงผลออกมาเป็น ค่าว่างด้วยค่ะ ตอนนี้ที่ติดอยู่
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: Hide ข้อความที่เรากำหนด ไม่ให้แสดง ใน column

#10

Post by snasui »

:D ลองดูว่าใช่ที่ต้องการหรือไม่ครับ

Code: Select all

Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    i = 1
    Application.EnableEvents = False
    For i = 9 To 39
        If Range("g" & i).Value = "" Then
            Range("i" & i).Value = ""
            Range("j" & i).Value = ""
        End If
        If Target.Address = Range("$G$" & i).Address Then
            Dim lot As String
            lot = Range("$G$" & i + 1).Value
            Dim x As String
            x = Range("$G$" & i).Value
            Call ShowMFGDate(lot)
            Call ExpDate(lot)
        End If
        'Fuction MFG
        If Target.Address = Range("$G$" & i).Address Then
            If UCase(Target.Value) = UCase(Range("I" & i).Value) Then
                Range("$G$" & i).Value = lot
                ElseIf Range("$G$" & i + 1) = "" Then
                Range("$I$" & i + 1).Value = ""
            End If
        End If
        'Fuction EXP
        If Target.Address = Range("$G$" & i).Address Then
            If UCase(Target.Value) = UCase(Range("J" & i).Value) Then
                Range("$G$" & i).Value = lot
            ElseIf Range("$G$" & i + 1) = "" Then
                Range("$J$" & i + 1).Value = ""
            End If
        End If
    Next i
    Application.EnableEvents = True
End Sub
Post Reply